在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
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
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
Set是一种不包括重复元素的Collection,与List一样,它同样运行null的存在但是仅有一个。由于Set接口的特殊性,所有传入Set集合中的元素都必须不同。实现了Set接口的集合有:EnumSet、HashSet、TreeSet。
Map
Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。