# 课程：接口

> 原文： [https://docs.oracle.com/javase/tutorial/collections/interfaces/index.html](https://docs.oracle.com/javase/tutorial/collections/interfaces/index.html)

_ 核心集合接口 _ 封装了不同类型的集合，如下图所示。这些接口允许独立于其表示的细节来操纵集合。核心集合接口是 Java 集合框架的基础。正如您在中看到的下图，核心集合接口形成层次结构。

![Two interface trees, one starting with Collection and including Set, SortedSet, List, and Queue, and the other starting with Map and including SortedMap.](img/7a5ed10e7a4f3194580b9f165722a7c6.jpg)

核心集合接口。



`Set`是一种特殊的`Collection`，`SortedSet`是一种特殊的`Set`，依此类推。还要注意，层次结构由两个不同的树组成 - `Map`不是真的`Collection`。

请注意，所有核心集合接口都是通用的。例如，这是`Collection`接口的声明。

```
public interface Collection<E>...

```

`&lt;E&gt;`语法告诉您接口是通用的。当您声明`Collection`实例时，您可以 _ 并且 _ 应该指定集合中包含的对象类型。指定类型允许编译器验证（在编译时）您放入集合的对象类型是否正确，从而减少运行时的错误。有关泛型类型的信息，请参阅[泛型（更新）](../../java/generics/index.html)课程。

当您了解如何使用这些接口时，您将了解有关 Java Collections Framework 的大部分知识。本章讨论有效使用接口的一般准则，包括何时使用哪个接口。您还将学习每个界面的编程习惯用语，以帮助您充分利用它。

为了保持核心集合接口的数量可管理，Java 平台不为每个集合类型的每个变体提供单独的接口。 （这些变体可能包括不可变，固定大小和仅附加。）而是，每个接口中的修改操作被指定为 _ 可选 _ - 给定的实现可以选择不支持所有操作。如果调用了不支持的操作，则集合将抛出 [`UnsupportedOperationException`](https://docs.oracle.com/javase/8/docs/api/java/lang/UnsupportedOperationException.html) 。实现负责记录它们支持哪些可选操作。所有 Java 平台的通用实现都支持所有可选操作。

以下列表描述了核心集合接口：

*   `Collection` - 集合层次结构的根。集合表示一组称为 _ 元素 _ 的对象。 `Collection`接口是所有集合实现的最小公分母，用于传递集合并在需要最大通用性时对其进行操作。某些类型的集合允许重复元素，而其他集合则不允许。有些是订购的，有些则是无序的。 Java 平台不提供此接口的任何直接实现，但提供更具体的子接口的实现，例如`Set`和`List`。另见[`collection`接口](collection.html)部分。
*   `Set` - 不能包含重复元素的集合。该界面对数学集抽象进行建模，并用于表示集合，例如包含扑克牌的牌，构成学生日程的课程或在机器上运行的过程。另请参见[设置接口](set.html)部分。
*   `List` - 有序集合（有时称为 _ 序列 _）。 `List`可以包含重复元素。 `List`的用户通常精确控制列表中每个元素的插入位置，并且可以通过整数索引（位置）访问元素。如果你使用过`Vector`，你就会熟悉`List`的一般风味。另见[列表接口](list.html)部分。
*   `Queue` — a collection used to hold multiple elements prior to processing. Besides basic `Collection` operations, a `Queue` provides additional insertion, extraction, and inspection operations.

    队列通常（但不一定）以 FIFO（先进先出）方式对元素进行排序。除了优先级队列之外，优先级队列根据提供的比较器或元素的自然顺序对元素进行排序。无论使用什么顺序，队列的头部是通过调用`remove`或`poll`来移除的元素。在 FIFO 队列中，所有新元素都插入队列的尾部。其他类型的队列可能使用不同的放置规则。每个`Queue`实现都必须指定其排序属性。另请参见[队列接口](queue.html)部分。

*   `Deque` — a collection used to hold multiple elements prior to processing. Besides basic `Collection` operations, a `Deque` provides additional insertion, extraction, and inspection operations.

    Deques 可用作 FIFO（先进先出）和 LIFO（后进先出）。在双端队列中，可以在两端插入，检索和删除所有新元素。另见 [Deque 接口](deque.html)部分。

*   `Map` - 将键映射到值的对象。 `Map`不能包含重复键;每个键最多可以映射一个值。如果您使用过`Hashtable`，那么您已经熟悉了`Map`的基础知识。另见[映射接口](map.html)部分。

最后两个核心集合接口只是`Set`和`Map`的排序版本：

*   `SortedSet` - 一个`Set`，按升序维护其元素。提供了几个额外的操作以利用订购。排序集用于自然排序的集合，例如单词列表和成员资格卷。另见 [SortedSet 接口](sorted-set.html)部分。
*   `SortedMap` - 一个`Map`，按升序键维持其映射。这是`SortedSet`的`Map`类似物。排序映射用于自然排序的键/值对集合，例如字典和电话目录。另见 [SortedMap 接口](sorted-map.html)部分。

要了解排序接口如何维护其元素的顺序，请参见[对象排序](order.html)部分。