Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
core collection interfaces (核心集合接口) 封装了不同类型的集合,如下图所示。这些接口允许独立于其表示的细节来操纵集合。核心集合接口是 Java 集合框架的基础。正如你在 下图 中所看到的,核心集合接口构成了一个层次结构。
核心集合接口。
Set
是一种特殊的 Collection
,SortedSet
是一种特殊的 Set
,依此类推。还要注意,层次结构由两个不同的树组成 Map
不是真正的 Collection
。
请注意,所有核心集合接口都是泛型的。例如,这是 Collection
接口的声明。
public interface Collection<E>...
<E>
语法告诉你该接口是泛型的。声明 Collection
实例时,可以 并且应该 指定集合中包含的对象类型。指定类型允许编译器验证(在编译时)你放入集合的对象类型是否正确,从而减少运行时的错误。有关泛型类型的信息,请参阅 Generics (Updated) 课程。
当你了解如何使用这些接口时,你将了解有关 Java 集合框架的大部分知识。本章讨论有效使用接口的一般准则,包括何时使用哪个接口。你还将学习每个接口的编程习惯用法,以帮助你充分利用它。
为了保持核心集合接口的数量可管理,Java 平台不为每个集合类型的每个变体提供单独的接口。(这些变体可能包括不可变,固定大小和仅追加。)相反,每个接口中的修改操作都指定为 optional (可选) 给定的实现可以选择不支持所有操作。如果调用了不受支持的操作,则集合将抛出 UnsupportedOperationException
。实现负责记录它们支持哪些可选操作。所有 Java 平台的泛型实现都支持所有可选操作。
以下列表描述了核心集合接口:
Collection
集合层次结构的根。集合表示一组称为 elements (元素) 的对象。Collection
接口是所有集合实现的最小公分母,用于传递集合并在需要最大泛型性时对其进行操作。某些类型的集合允许重复元素,而其他集合则不允许。有些是有序的,有些是无序的。Java 平台不提供此接口的任何直接实现,但提供更具体的子接口的实现,例如 Set
和 List
。另请参阅 The Collection Interface 部分。Set
一个不能包含重复元素的集合。该接口对数学集抽象进行建模,并用于表示集合,例如包含扑克手牌的卡片,构成学生日程表的课程或在机器上运行的进程。另请参见 The Set Interface 部分。List
有序集合(有时称为 sequence (序列))。List
可以包含重复元素。List
的用户通常可精确控制列表中每个元素的插入位置,并可通过其整数索引(位置)访问元素。如果你使用过 Vector
,则你熟悉 List
的一般风格。另请参阅 The List Interface 部分。Queue
用于在处理之前保存多个元素的集合。除了基本的 Collection
操作外,Queue
还提供了额外的插入,提取和检查操作。
队列通常(但不一定)以 FIFO(先进先出)方式对元素进行排序。其中的例外是优先级队列,它根据提供的比较器或元素的自然顺序对元素排序。无论使用什么顺序,队列的头部是通过调用 remove
或 poll
来移除的元素。在 FIFO 队列中,所有新元素都插入队列的尾部。其他类型的队列可能使用不同的放置规则。每个 Queue
实现都必须指定其排序属性。另请参阅 The Queue Interface 部分。
Deque
用于在处理之前保存多个元素的集合。除了基本的 Collection
操作外,Deque
还提供了额外的插入,提取和检查操作。
Deques 可以用作 FIFO(先进先出)和 LIFO(后进先出)。在双端队列中,可以在两端插入,获取和移除所有新元素。另请参阅 The Deque Interface 部分。
Map
将键映射到值的对象。Map
不能包含重复键;每个键最多可以映射一个值。如果你使用过 Hashtable
,那么你已经熟悉了 Map
的基础知识。另请参阅 The Map Interface 部分。最后两个核心集合接口只是 Set
和 Map
的排序版本:
SortedSet
以升序维护其元素的 Set
。提供了几个额外的操作以利用排序。有序集用于自然排序的集合,例如单词列表和成员资格卷。另请参阅 The SortedSet Interface 部分。SortedMap
以升序键顺序维护其映射的 Map
。这是 SortedSet
的 Map
类似物。排序映射用于自然排序的键/值对集合,例如字典和电话目录。另请参阅 The SortedMap Interface 部分。要了解排序接口如何维护其元素的顺序,请参阅 Object Ordering 部分。