集合层次结构中的根接口。集合代表一组对象,称为其元素。有些集合允许重复元素,有些则不允许。有些是有序的,有些是无序的。JDK 不提供此接口的任何直接实现:它提供了更具体子接口(如 Set 和 List)的实现。此接口通常用于在需要最大通用性的场景中传递和操作集合。包(Bag)或多重集(multiset)(可能包含重复元素的无序集合)应直接实现此接口。所有通用 Collection 实现类(通常通过其子接口之一间接实现 Collection)都应提供两个“标准”构造器:一个无参构造器,用于创建空集合;以及一个带有单个 Collection 类型参数的构造器,用于创建具有与其参数相同元素的新集合。实际上,后一个构造器允许用户复制任何集合,生成所需实现类型的等效集合。无法强制实施此约定(因为接口不能包含构造器),但 Java 平台库中的所有通用 Collection 实现都遵守此约定。此接口中包含的“破坏性”方法(即修改它们所操作的集合的方法)被指定在集合不支持该操作时抛出 UnsupportedOperationException。如果集合不支持该操作,则这些方法在调用不会对集合产生任何影响时可 能(但不是必须)抛出 UnsupportedOperationException。例如,在不可修改的集合上调用 addAll(Collection) 方法时,如果要添加的集合为空,则可能(但不是必须)抛出该异常。一些集合实现对它们可能包含的元素有限制。例如,某些实现禁止空元素,有些则对其元素类型有限制。尝试添加不合格的元素会抛出未经检查的异常,通常是 NullPointerException 或 ClassCastException。尝试查询不合格元素是否存在可能会抛出异常,或者可能仅返回 false;有些实现会表现出前一种行为,有些会表现出后一种行为。更一般地说,尝试对不合格元素执行操作,且该操作的完成不会导致不合格元素被插入集合时,可能会抛出异常或可能成功,这取决于实现的选择。在此接口的规范中,此类异常被标记为“可选”。由每个集合自行确定其同步策略。在没有实现提供更强保证的情况下,对正被另一个线程修改的集合调用任何方法可能导致未定义的行为;这包括直接调用、将集合传递给可能执行调用的方法,以及使用现有迭代器检查集合。集合框架接口中的许多方法都是根据 Object.equals 方法定义的。例如,contains(Object) 方法的规范说明:“当且仅当此集合包含至少一个元素 e 满足 (o==null ? e==null : o.equals(e)) 时返回 true。”此规范不应被解释为暗示使用非空参数 o 调用 Collection.contains 将导致对任何元素 e 调用 o.equals(e)。实现可以自由地实施优化来避免 equals 调用,例如首先比较两个元素的哈希码。(Object.hashCode() 规范保证具有不相等哈希码的两个对象不可能相等。)更一般地说,各种集合框架接口的实现可以自由地利用底层 Object 方法的指定行为,只要实现者认为合适。一些对集合执行递归遍历的集合操作可能因 自引用实例(集合直接或间接包含自身)而失败并抛出异常。这包括 clone()、equals()、hashCode() 和 toString() 方法。实现可以选择性地处理自引用场景,但大多数当前实现不这样做。实现要求:默认方法的实现(无论是继承的还是其他方式)不应用任何同步协议。如果某个 Collection 实现具有特定的同步协议,则必须重写默认实现以应用该协议。另请参阅:Set、List、Map、SortedSet、SortedMap、HashSet、TreeSet、ArrayList、LinkedList、Vector、Collections、Arrays、AbstractCollection
public interface Collection<E> extends Iterable<E> {}