集合框架详解

本文介绍了Java集合框架的基本概念,包括其提供的核心接口如Collection、Map和Iterator等,并详细阐述了集合与数组的区别,以及Collection接口的使用方法。此外,还探讨了Set接口及其常用子类HashSet的特点。

集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。
一.集合框架概述:
    1、Java的集合框架提供了一套设计优良的接口和类,使程序员操作成批的数据或对象元素极为方便,极大的简化了程序员编程时的负担。
    2、Java的集合框架的核心接口为:Collection、Map、Iterator,这三个接口为以后要使用的最重点的接口。
    3、按具体集合类使用上的特性来分的话,主要有三类:List、Set和Map。List是有序的,但允许重复;Set是无序的,但不允许重复;Map表现的是键值对的概念。


集合可以理解为包含一堆元素的对象。

二.集合与数组的区别:

1、数组是定长,即创建后固定不变(数组在实例化的时候是一定要指定长度的);集合不是定长,其长度可动态增长或减少。

2、数组是同构的,即数组中的元素是相同的类型;集合可以是异构的(容易造成安全隐患),当然也可以通过泛型创建类型安全的同构集合。

3、数组中可以存放基本数据类型或对象;集合只存放对象。

4、数组的读取效率比集合更高,但集合能够适用的环境比数组要宽广的多。数组是直接按下标提取元素,提取元素是不需要经过运算的。而集合是通过方法再来转化成内部的存储结构,来读取元素或者存储元素,是要经过换算的,得到算法的支持的。

三.Collection接口

1、Collection接口是在整合Java集合中List和Set的父接口,此接口定义如下:   

public interface Collection<E> extends Iterable<E>{}

此接口使用了泛型,在Java5之后为了使集合操作更加安全,引入了泛型。这里简单了解泛型知识:

public class GenericHolder<T> {//类类型参数化,具体使用时决定类的类型;多个参数之间用,隔开;

	private T content;

	public T getContent() {
		return content;
	}

	public void setContent(T content) {
		this.content = content;
	}

	public static void main(String[] args) {
		GenericHolder<String> sHolder = new GenericHolder<String>();//表明GenericHolder中存放的是String类型的content
		sHolder.setContent("string");
		GenericHolder<Integer> iHolder = new GenericHolder<Integer>();//表明GenericHolder中存放的是Integer类型的content
		iHolder.setContent(123);
		GenericHolder<Bus> bHolder = new GenericHolder<Bus>();//表明GenericHolder中存放的是Bus类类型的content
		bHolder.setContent(new Bus());
		GenericHolder oHolder = new GenericHolder();//表明GenericHolder中存放的是Object类型的content
		oHolder.setContent("object");
		
	}
}

class Bus {
	
}

2、Collection接口中的常用方法

package com.microxt.fusion.web;

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;


public class GenericHolder {

	public static void main(String[] args) {
		Collection<String> c = new HashSet<String>();//String类型的集合HashSet
		System.out.println(c.add("one"));//添加元素成功,返回true,也就打出true
		System.out.println(c.add("one"));//由于HashSet集合不允许添加重复元素,打出false
		c.add("two");
		c.add("three");
		c.add("four");
		c.add("five");
		System.out.println(c);//打印出HashSet集合对象c中添加的元素
		
		System.out.println(c.remove("three"));//打印出true;
		System.out.println(c.remove("three"));//打印出false;
		System.out.println(c);

		Iterator<String> it = c.iterator();//Collection对象的iterator()方法返回一个Iterator
		while (it.hasNext()) {//判断是否有下一个元素
			String s = it.next();
			System.out.println(s);
		}
		
		System.out.println("-------------------------");
		
		System.out.println("one:" + c.contains("one"));//contains()用来检查集合里面有没有指定元素存在;打印出true;
		System.out.println("three:" + c.contains("three"));//打印出false;
		
		System.out.println("-------------------------");
		
		Collection<String> c2 = new HashSet<String>();
		Collections.addAll(c2, "two", "five", "six");//加到集合c2中的元素是two、five、six,且后边元素的个数是不限的,可变的;
		c.retainAll(c2);//c集合中只保留c2集合中指定的元素
		System.out.println(c);
		
		System.out.println("-------------------");
		String[] array = c.toArray(new String[5]);//将集合转化成数组 ;长度为5的String类型的数组;
		System.out.println(Arrays.toString(array));
	}

}

四.Set接口

1、Set接口是Collection的子接口,Set内的元素是唯一的;

2、Set接口并没有对Collection接口进行扩展,但在具体方法的含义上进行了进一步约定;

3、Set不包含满足e1.equals(e2)的元素对e1和e2,并且最多包含一个null元素;

4、那么在此接口中有两个常用的子类:HashSet、TreeSet;

HashSet

1、HashSet是Set接口最常用的一种实现,它不保障元素的迭代顺序,并允许使用null元素;

2、HashSet根据哈希码来确定对象在容器中的存储位置,因此要加入的元素要实现hashCode方法,同时它具有非常优秀的查询性能;

3、在比较两个元素是否相同时,HashSet会先比较哈希值是否相同,再使用equals方法比较,如果两者都相同,则视为相同的对象。

4、加入到HashSet中的元素类,最好总是重新定义equals和hashCode方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值