在java JDK1.2中提出了类集框架的概念并在JDK1.5中对此框架进行了修改,加入了泛型。在整个集合中,其核心的接口是Collection、Set、List、Map等,具体请看下面的java集合框架图: 在上述类图中,HashSet、HashMap、ArrayList、LinkedList等实线边框的是实现类,AbstractCollection、AbstractList、AbstractSequentialList、AbstractMap等折线边框的是抽象类,而Collection、Iterator、List、Set、queue、Map等点线边框是接口。
Collection是集合框架层次中的根接口,JDK中并没有该接口的实现类;故此,Collection接口在本身的开发中并不会直接的使用,而是在开发的过程中使用两个子接口:Set、List。
Collection接口中定义了几个常用的方法:
public interface Collection<E> extends Iterable<E>{ //获取元素的个数 int size(); //判断集合是否为空 boolean isEmpty(); //查找一个元素是否存在 boolean contains(Object o); //迭代器 Iterator<E> iterator(); //将集合转换成对象数组 Object[] toArray(); //将集合转换成制定的类型的对象数组 <T> T[] toArray(T[] a); // 添加数据 boolean add(E e); //删除指定的元素 boolean remove(Object o); //判断该集合是否包含了指定集合所有的元素 boolean containsAll(Collection<?> c); //将指定集合中的所有元素添加到该集合中 boolean addAll(Collection<? extends E> c); //移除该集合中包含指定集合的所有元素 boolean removeAll(Collection<?> c); //从该集合中移除不包含在指定集合中的所有元素 boolean retainAll(Collection<?> c); //清除数据 void clear(); //将指定对象与此集合比较相等 boolean equals(Object o); //返回此集合的哈希代码值 int hashCode(); }List接口是Collection接口的子接口,是有序的 collection。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引访问元素,并搜索列表中的元素。 List接口中定义了几个常用的方法(与Collection不同的):
public interface List<E> extends Collection<E> { //获取元素 E get(int index); // 根据索引将元素数值替换 E set(int index, E element); //根据索引将元素数值加入,原来的值后移 void add(int index, E element); //按照索引删除 E remove(int index); //查看指定对象元素的索引 int indexOf(Object o); //查看指定元素的最后一个匹配项的索引 int lastIndexOf(Object o); //返回此列表元素的列表迭代器(按适当顺序)。 ListIterator<E> listIterator(); //返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。 ListIterator<E> listIterator(int index); //返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。 List<E> subList(int fromIndex, int toIndex); }Set是一种不包括重复元素的Collection,与List一样,它同样运行null的存在但是仅有一个。由于Set接口的特殊性,所有传入Set集合中的元素都必须不同。实现了Set接口的集合有:EnumSet、HashSet、TreeSet。
Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。