Java 集合之Set接口

Java 集合之Set接口

  • 不包含重复元素的集合。 更确切地讲,set 不包含一对e1.equals(e2)的元素 e1 和 e2,并且最多包含一个空元素。 正如其名称所暗示的那样,此接口模仿了数学上的 set 抽象。

  • 除了从 Collection 接口继承的那些之外,Set 接口对所有构造函数的协定以及 add、equals 和 hashCode 方法的协定进行了额外的规定。 为方便起见,此处还包括其他继承方法的声明。 (这些声明附带的规范已针对 Set 接口量身定制,但它们不包含任何附加规定。)

  • 对构造函数的附加规定:所有构造函数都必须创建一个不包含重复元素的集合(如上文所定义)。

  • 注意:如果将可变对象用作 set 元素,则必须非常小心。 如果对象的值以影响 equals 比较的方式更改,而对象是集合中的元素,则不会指定集合的行为。 此禁止的一个特殊情况是不允许 set 将自身包含为元素。

  • 某些 set 实现对其所包含的元素有所限制。例如,某些实现禁止 null 元素,而某些则对其元素的类型所有限制。

    • 试图添加不合格的元素会抛出未经检查的异常,通常是 NullPointerExceptionClassCastException
    • 试图查询不合格的元素是否存在可能会抛出异常,也可能简单地返回 false。
    • 概括地说,试图对不合格元素执行操作时,如果完成该操作后不会导致在 set 中插入不合格的元素,则该操作可能抛出一个异常,也可能成功,这取决于实现的选择。此接口的规范中将这样的异常标记为“可选”。
  • 不可修改的集合 Set.of (JDK9新增)和 Set.copyOf (JDK10新增)静态工厂方法提供了一种创建不可修改的集合的便捷方法。 这些方法创建的 Set 实例具有以下特点:

    • 它们是不可修改的。 不能添加或删除元素。 调用 Set 上的任何 mutator 方法将始终导致抛出 UnsupportedOperationException。 但是,如果包含的元素本身是可变的,这可能会导致 Set 的行为不一致或它的内容似乎发生了变化。
    • 它们不允许空元素。 尝试使用空元素创建它们会导致 NullPointerException。
    • 如果所有元素都可序列化,则它们是可序列化的。
    • 他们在创建时拒绝重复的元素。 传递给静态工厂方法的重复元素会导致 IllegalArgumentException。
    • 集合元素的迭代顺序未指定并且可能会发生变化。
    • 它们是基于价值的。 程序员应将相等的实例视为可互换的,不应将它们用于同步,否则可能会出现不可预测的行为。 例如,在未来的版本中,同步可能会失败。 调用者不应假设返回实例的身份。 工厂可以自由创建新实例或重用现有实例。
    • 它们按照“序列化表单”页面上的指定进行序列化。

方法

没有与索引相关的方法,故而想要遍历set需使用迭代器

Modifier and TypeMethodDescription
booleanadd (E e)如果指定元素尚不存在,则将其添加到此集合中(可选操作)。
booleanaddAll (Collection<? extends E> c)如果指定集合中的所有元素尚不存在,则将其添加到此集合中(可选操作)。
voidclear()从此集合中删除所有元素(可选操作)。
booleancontains (Object o)如果此集合包含指定的元素,则返回 true。
booleancontainsAll (Collection<?> c)如果此集合包含指定集合的所有元素,则返回 true。
static SetcopyOf (Collection<? extends E> coll)返回一个不可修改的 Set,其中包含给定 Collection
booleanequals (Object o)比较指定的对象与此集合是否相等。
inthashCode()返回此集合的哈希码值。
booleanisEmpty()如果此集合不包含任何元素,则返回 true。
Iteratoriterator()返回此集合中元素的迭代器。
static Setof()返回包含零个元素的不可修改set。
static Setof(E… elements)返回包含任意数量元素的不可修改set。
static Setof(E e1, E e2,){1~10}返回包含1~10个(具体取决于定义的E ei的个数)元素的不可修改set。
booleanremove (Object o)如果指定元素存在,则从该集合中移除指定元素(可选操作)。
booleanremoveAll (Collection<?> c)从此集合中移除指定集合中包含的所有元素(可选操作)。
booleanretainAll (Collection<?> c)仅保留此集合中包含在指定集合中的元素(可选操作)。
intsize()返回此集合中的元素数(其容量)。
default Spliteratorspliterator()在此集合中的元素上创建一个 Spliterator。
Object[]toArray()返回一个包含此集合中所有元素的数组。
T[]toArray (T[] a)返回一个包含该集合中所有元素的数组; 返回数组的运行时类型是指定数组的类型。
  • 从 java.util.Collection接口继承的方法parallelStream, removeIf, stream, toArray
  • 从 java.lang.Iterable接口继承的方法forEach
posted @ 2021-08-17 23:54  SKPrimin  阅读(69)  评论(0编辑  收藏  举报