原文:http://docs.oracle.com/javase/tutorial/collections/interfaces/index.html
核心集合接口封装了不同类型的集合,如下图所示。这些接口使得我们可以操作集合而不必关心它们的具体实现细节。核心集合接口是Java集合框架的基础。正如我们可以从下图看到的,核心集合接口形成了层次结构:
Set是一种特殊的集合,而一个SortedSet是一种特殊的Set,以此类推。注意上图的层次结构中包含两棵独立的树 — Map不是一个真正意义上的集合。
注意所有的核心集合接口都是泛型化的(generic)。例如下面是Collection接口的声明:
public interface Collection<E>...
<E>语法告诉我们这个接口是泛型化的。当我们声明一个集合实例时,我们可以也必需指定集合中对象的类型。指定类型使得编译器能在编译时验证集合中的元素的类型都是正确的,从而减少运行时错误。如果想获取更多的关于泛型的信息,敬请参考Java Generic Turtorial 。
当你学会使用这些接口后,你就了解了Java集合框架中的大部分内容。本章讨论关于如何有效使用这些接口的一些建议,包括何时使用何种接口。我们也将学会每个接口的一些习惯用法。
为了保证核心集合接口的数量可控,Java平台没有为每一种集合类型的变种都提供单独的接口(这些变种包括不可变、固定大小以及只可追加)。相反,每个集合接口上的操作都是可定制的(可选的),某个集合接口的实现可能不会支持所有集合操作。如果调用集合不支持的一个操作,将抛出UnsupportedOperationException。集合接口的实现必需用文档记录它所支持的集合操作。
下面的列表描述了Java集合框架的几个核心接口:
- Collection:集合层次结构树的根接口。一个Collection表示一组元素对象。Collection接口是所有集合对象都必须实现的接口。一些Collection接口的实现允许重复元素,而另外一些则不允许。Java平台没有提供任何对这个接口的直接实现,但是提供了一些更加专用的子接口,比如Set接口和List接口。更多请参考The Collection Interface(中文翻译)
- Set:一个不能包含重复元素的集合。这个接口对应数学上的Set,被用来表示数学意义上的集合,比如一手牌、一个学生选的课或者机器上运行的进程。更多请参考The Set Interface(中文翻译)
- List:一个有序集合(有时候又叫做序列)。List可以包含重复元素。使用List可以精确控制每个元素在List中的位置,可以指定index插入元素或者访问元素。如果你已经使用过Vector,那么你已经熟悉了List的一般功能了。更多请参考The List Interface
- Queue:队列。除了基本的集合操作外,一个Queue提供了额外的插入、删除和审查元素操作。Queue一般(但非必须)将元素组织成FIFO(先进先出)形式。有一个例外是优先队列,它按照用户提供的Comparator或者自然序排列元素。不管怎么排序,队列的头始终是第一个被移除的,当调用remove或者poll方法后。在一个先进先出队列中,新插入的元素总是放到队列末尾。其他种类的队列可能会使用不同的放置规则。所有队列实现都必需指定它的排序属性。更多请参考The Queue Interface
- Map: 将键(keys)映射到值(values)的对象。一个Map不能包含重复的键;每个键最多只能映射到一个值。如果你使用过Hashtable,那么你已经熟悉了Map的基本使用。更多请参考The Map Interface
最后两种核心集合接口仅仅是Set和Map的排序版本:
- SortedSet:元素按照升序排列的Set。SortedSet提供了几个额外的操作来利用排序特性。SortedSet常被用来出力自然排序集合,例如单词列表和会员名册。更多请参考The SortedSet Interface
- SortedMap:键按照升序排列的Map。SoretedMap常被用作自然排序的key/value对,例如字典和电话簿。更多请参考The SoretedMap Interface
想了解排序接口如何排序元素,请参考The Object Ordering