Java Set and AbstractSet 详解 - TongtongLan/Java GitHub Wiki

Set

实现一个无重复项的集合。More formally, sets contain no pair of elements e1 and e2 such that e1.equals(e2), and at most one null element. As implied by its name, this interface models the mathematical set abstraction(模拟了数学集合模型).

AbstractSet

这个类提供了Set接口的骨架实现,以最小化实现这个接口所需的工作量。

通过扩展这个类来实现一个集合的过程与通过扩展AbstractCollection来实现一个集合的过程相同,只不过这个类的子类中的所有方法和构造函数都必须遵守Set接口施加的附加约束(例如, add方法不允许将一个对象的多个实例添加到一个集合中)。

请注意,此类不会覆盖AbstractCollection类中的任何实现。 它只是增加了equals和hashCode的实现。

  • public boolean removeAll(Collection<?> c)

从该集合中移除指定集合中包含的所有元素(可选操作)。如果指定集合也是集合,则此操作将有效地修改此集合,使其值为两个集合的非对称集合差异。

这个实现通过调用每一个的size方法来确定这个集合和指定的集合中哪一个更小。如果这个集合有更少的元素,那么这个实现迭代这个集合,依次检查迭代器返回的每个元素,看看它是否包含在指定的集合中。如果包含它,则使用迭代器的remove方法将其从此集中移除。如果指定的集合有更少的元素,那么实现迭代指定的集合,从这个集合中删除迭代器返回的每个元素,使用这个集合的remove方法。

请注意,如果迭代器方法返回的迭代器未实现remove方法,则此实现将抛出UnsupportedOperationException异常。