Java集合框架小结

一、概述

集合框架(Collections Framework)的集合是指操作一组同类对象的容器。
在java5中有四个主要集合接口:
List,列表,一般情况下元素按自然顺序排列。可以根据索引任意访问其中元素。
  具体方法是<E> get(int index).
Queue,队列,FIFO或LIFO,还有优先级队列都实现此接口。只能访问对首元素。
Set,元素唯一,中文有翻译为组。通过Iterator访问。
Map,键-值映射,Map并没有实现Collection接口,但它是Java集合框架的一部分。通过键访问。get(Object key).
在java6中新增Deque接口,实现双端队列。

图1是接口的继承框架图



接口及其描述

Collection   允许处理一组对象,它位于集合层次结构的顶部
List         扩展Collection接口以处理序列(对象列表)
Queue        扩展Collection接口以处理列表中的特殊类型,其中的元素只能从前面删除(即队列)
Deque        扩展Queue,以处理双端队列(由Java SE6增加)
Set          扩展Collection接口以处理集合,其中元素必须唯一
SortedSet    扩展Set接口,以处理排序的集合,不允许null对象。
NavigableSet 扩展SortedSet接口,以处理基于最接近匹配搜索的元素的取回一个或多个值(由Java SE6增加)



图2是类的继承框架图,主要根据集合所属的类别划分,有些混合实现接口没有表示出来。比如PriorityQueue还实现了List接口,图中没有标示,请参考API文档。



类及其描述

AbstractCollection  实现大部分Collection接口

AbstractList  扩展AbstractCollection,实现大部分List接口
AbstractSequentialList 扩展AbstractList,用于顺序而不是随机访问集合的元素
ArrayList    通过扩展AbstractList实现动态数组,实现List接口。
LinkedList   扩展AbstractSequentialList实现链表。实现了List,Deque和Queue接口。

AbstractQueue  扩展AbstractCollection,实现部分Queue接口
PriorityQueue  扩展Collection接口以处理集合,实现Queue接口。动态可按需增长。
ArrayDeque  扩展AbstractCollection和实现Deque接口,允许动态双端队列(JavaSE6)

AbstractSet     扩展AbstractCollection,实现大部分set接口
EnumSet    扩展AbstractSet接口,实现Set接口。用于enum元素
TreeSet    在树中实现组。扩展AbstractSet接口,并实现了NavigableSet接口。它创建一个树结构来存储元素的集合。对象以升序顺序存储,访问和读取时间很快,是存储大量有序数据的很好选择。
HashSet    扩展AbstractSet接口,实现Set接口。用于哈希表,不保证元素的顺序。
LinkedHashSet   扩展HashSet,允许按照插入的顺序来迭代。


二、遗留的类和接口

java.util定义的遗留类如下所示:

  Dictionary   Hashtable  Properties   Stack   Vector

还有一个遗留接口Enumeration,分述于下。

1,Enumeration接口定义了枚举对象集合中元素的方法(一次得到一个),它已经被Iterator取代。尽管没有被建议不使用,但它对于新代码来说还是过时的。但是,它被遗留类定义的多个方法所使用(如Vector和Properties),也用于多个其它API类中,JDK5将它更新为泛型。

2,Vector实现一个动态数组。这与ArrayList相似,但是有两个区别:Vector是同步的,并且包含不在集合框架中的许多遗留方法。Vector被重新设计,以扩展AbstractList和实现List接口,并在JDK5中更新为泛型。

3,Stack是Vector的一个子类,它实现了标准的后进先出堆栈。在JDK5中更新为泛型。尽管Stack没有被建议不使用,但随着Java SE6的发布,ArrayDeque是一个更好的选择。

4,Dictionary是一个表示键值对存储库的抽象类,操作与Map很相似。尽管没有被建议不使用,但被列为过时的,因为Map可以完全取代它。在JDK5中被更新为泛型类。

5,Hashtable是原始的java.util包的一部分,它是Dictionary的具体实现。随着集合的出现,Hashtable被重新构造了,以便它也能实现Map接口。它与HashMap类似,但它是同步的。

6,Properties是Hashtable的一个子类,它用来维护值的列表,其键是一个String,且其值也是一个String。它被许多其它Java类使用。例如,当获取环境值时,它是System.getProperties()方法返回的对象类型。尽管Properties类自身不是泛型,但它的一些方法是泛型。

你可能感兴趣的:(java,数据结构,框架)