集合类是java提供的工具类,主要包括List、Set、Map和vector等类型。所有的集合相关类都位于java.util.*内。
集合类的总体框架图如下图所示:
对总体框架的说明:
集合框架中最顶层的接口有Iterator、Collection和Map三个。其中Itireator是所有迭代器需要实现的接口,Collection是所有的线性结构集合所要实现的接口,Map是所有的非线性集合所要实现的接口,元素以Key、value的形式保存。
Collection下层中包含了Queue、List和set三个自接口。这三种接口有分别有各自的特点。其中Queue对应的数据结构是队列其特点是提供了两个基本操作:在队尾添加元素和在队列的头部删除元素,具有先进先出的特点;List中元素同样是以线性结构存储,并且可以存在重复元素;Set具有和Collection一样的接口,Set的特点是不允许存放重复元素,放入Set中的元素必须重写equals方法以确保元素的唯一性。再下一层的结构中定义了AbstractCollection、AbstractList、AbstractSet、AbstractSequentialList三个抽象类,在抽象类中实现了部分方法,这种设计使用了适配器的设计模式,这样做的好处是子类可以选择性的实现一些方法。最底层是Collection类系中的具体集合类,有ArrayList、LinkedList、Vector、Stack、HashSet、TreeSet六个集合类。其中ArrayList是采用数组的形式来保存对象,在通过使用索引访问元素的效率相对较高,但是插入删除效率低;是使用链表来保存元素,在使用索引访问元素时效率相对较低,但是插入删除操作效率高;Vector也是使用数组保存元素,但是Vector是支持线程同步的,即同一时刻只支持同一个线程对Vector操作;Stack是使用的栈这种数据结构,只支持在顶端插入和弹出操作;HashSet和TreeSet都不能保存重复元素,但是TreeSet可以以升序保存元素,HashSet通过哈希表的方式保存元素。
Map下层同样定义了一个AbstractMap来实现Map接口中的部分方法,以使得子类可以选择性的实现Map中的方法。Map中的实现类有TreeMap、HashMap、WeakHashMap和HashTable四个。其中TreeMap是以有序的方式保存元素,可以给Map中Key进行排序。HashMap是哈希表数据结构,效率相对要高;HashTable是Dirctionary的子类,是可以将任何Key映射到相应的值,所以在HashTable中不允许key或value存在null,而HashMap中允许存在一个为null的key和任意个位null的value。
Iterator接口下有ListIterator接口,所有的迭代器都必须实现此接口。支持通过迭代器遍历集合元素。