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 Type Method Description
boolean add (E e) 如果指定元素尚不存在,则将其添加到此集合中(可选操作)。
boolean addAll (Collection<? extends E> c) 如果指定集合中的所有元素尚不存在,则将其添加到此集合中(可选操作)。
void clear() 从此集合中删除所有元素(可选操作)。
boolean contains (Object o) 如果此集合包含指定的元素,则返回 true。
boolean containsAll (Collection<?> c) 如果此集合包含指定集合的所有元素,则返回 true。
static Set copyOf (Collection<? extends E> coll) 返回一个不可修改的 Set,其中包含给定 Collection
boolean equals (Object o) 比较指定的对象与此集合是否相等。
int hashCode() 返回此集合的哈希码值。
boolean isEmpty() 如果此集合不包含任何元素,则返回 true。
Iterator iterator() 返回此集合中元素的迭代器。
static Set of() 返回包含零个元素的不可修改set。
static Set of(E… elements) 返回包含任意数量元素的不可修改set。
static Set of(E e1, E e2,){1~10} 返回包含1~10个(具体取决于定义的E ei的个数)元素的不可修改set。
boolean remove (Object o) 如果指定元素存在,则从该集合中移除指定元素(可选操作)。
boolean removeAll (Collection<?> c) 从此集合中移除指定集合中包含的所有元素(可选操作)。
boolean retainAll (Collection<?> c) 仅保留此集合中包含在指定集合中的元素(可选操作)。
int size() 返回此集合中的元素数(其容量)。
default Spliterator spliterator() 在此集合中的元素上创建一个 Spliterator。
Object[] toArray() 返回一个包含此集合中所有元素的数组。
T[] toArray (T[] a) 返回一个包含该集合中所有元素的数组; 返回数组的运行时类型是指定数组的类型。
  • 从 java.util.Collection接口继承的方法parallelStream, removeIf, stream, toArray
  • 从 java.lang.Iterable接口继承的方法forEach

Guess you like

Origin blog.csdn.net/m0_46530662/article/details/119769014