Java源码 java.util.Set接口学习记录

本文详细介绍了Java中Set接口的概念和特点,包括其不包含重复元素的特性,以及提供了size、isEmpty、contains等常用方法的说明。同时,文章还列举了Set接口在添加、删除和查询元素时的一些限制和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是Set?

一个不包含重复元素的集合。更正式的说,sets不包含一对元素,e1和e2并且e1.equals(e2),最多包含一个null元素。就像它的名字,这个接口模型是数学上的set抽象概念。
Set接口在所有构造函数的契约以及add、equals和hashCode方法的契约上添加了额外的规定,而不是继承自集合接口的规定。为了方便起见,这里还包括了其他继承方法的声明。(这些声明附带的规范已经针对Set接口进行了调整,但它们没有包含任何额外的规定。)
毫不奇怪,构造函数的附加规定是,所有构造函数必须创建一个不包含重复元素的集合(如上所述)。
注意:如果使用可变对象作为set元素,必须非常小心。一组的行为没有指定如果一个对象的值改变的方式影响=比较对象是一组元素。这个禁止的一种特殊情况是不允许包含一组本身为一个元素。
一些set实现对它们可能包含的元素有限制。例如,有些实现禁止null元素,有些实现对其元素的类型有限制。尝试添加不符合条件的元素会引发未检查的异常,通常是NullPointerException或ClassCastException。试图查询不符合条件的元素是否存在可能会抛出异常,或者只返回false;一些实现将展示前一种行为,而另一些将展示后一种行为。更普遍的是,如果一个不符合条件的元素的完成不会导致将一个不符合条件的元素插入到集合中,尝试对它进行操作可能会抛出异常,也可能成功,这取决于实现的选项。此类异常在该接口的规范中被标记为“可选”。
set包含的方法如下:

1)size

int size():
返回这个set的元素数量。如果set包含的数量大于int的最大值,则返回int的最大值。

2)isEmpty

boolean isEmpty()
返回true如果这个set不包含元素

3)contains

boolean contains(Object o)
返回true如果这个set包含指定的元素。更形象的说,返回true仅当这个set包含一个元素满足(o==null ? e==null : o.equals(o))
异常:
ClassCastException:如果指定元素的类型于这个set相矛盾
NullPointerException:这个指定元素为null,并且这个set不允许null元素

4)iterator

Iterator iterator()
返回一个用于迭代这个set元素的迭代器。元素不按照特定的顺序返回。(除非该集合是提供担保的某个类的实例)
5)toArray
Object[] toArray()
返回一个数组包含这个set中的所有元素。如果这个set保证了它的迭代器返回元素的顺序,那么这个方法必须以相同的顺序返回元素。

6)toArray

T[] toArray(T[] a)
返回一个包含集合中所有元素的数组;返回的数组的运行时类型是指定数组的运行时类型。如果集合符合指定的数组,则返回集合。否则,将使用指定数组的运行时类型和该集合的大小分配一个新数组。
如果这个集合在指定的数组中有多余的空间(例如,这个数组的元素比这个集合的多),那么紧随这个集合末尾的数组中的元素就被设为null。(只有当调用者知道这个集合不包含任何null元素时,它才有助于确定这个集合的长度。)
如果这个集合保证了它的迭代器返回元素的顺序,那么这个方法必须以相同的顺序返回元素。
与toArray()方法一样,这个方法充当了基于数组和基于集合的api之间的桥梁。此外,这种方法允许对输出数组的运行时类型进行精确控制,并且在某些情况下,可以使用这种方法来节省分配成本。
假设x是已知的只包含字符串的集合。下面的代码可以用来将set转储到新分配的String数组中:
String[] y = x.toArray(new String[0]);
异常:
ArrayStoreException:如果则个指定元素的运行类型不支持这个set中每个元素的运行类型中的某一个超类型
NullPointerException:这个指定元素为null

7)add

boolean add(E e)
添加指定元素到这个set中,如果这个元素不已经存在set。更正式的说法是,如果set中不包含e2元素,则将指定的元素e添加到该set中(e==null ?e2 = = null: e.equals (e2))如果set中已经包含该元素,则调用保持set不变并返回false。结合构造函数的限制,这确保了集合中不会包含重复的元素。
上述规定并不意味着规定必须接受所有的要素;set可以拒绝添加任何特定元素,包括null,并抛出异常,如Collection.add规范中所述。单独的set实现应该清楚地记录对它们可能包含的元素的任何限制。
异常:
UnsupportedOperationException: 如果add操作不被这个set支持
ClassCastException:如果这个指定元素的类阻止它被添加到这个set中
NullPointerException:如果这个指定元素为null,而这个set不允许null元素
IllegalArgumentException:如果这个指定元素的某些属性阻止它被添加到这个set

8)remove

boolean remove(Object o)
如果这个元素存在set中,移除指定元素,返回true
异常:
ClassCastException:如果这个指定元素的类型于这个set矛盾
NullPointerException:如果这个指定元素为null,而set不允许null元素
UnsupportedOperationException:如果remove操作不被这个set支持

9)containsAll

boolean containsAll(Collection<?> c)
返回true,如果这个set中包含指定集合中的所有元素。如果指定的集合也是一个集合,如果它是该集合的子集,则此方法返回true。
异常:
ClassCastException:如果这个指定集合中一个或多个元素的类型与set不兼容。
NullPointerException:如果这个指定集合中一个或多个元素为null,而set不允许null元素。或者指定集合为null

10)addAll

boolean addAll(Collection<? extends E> c)
如果指定集合中的所有元素不存在set中,则往set添加指定集合中的所有元素。如果指定的集合也是一个集合,addAll操作将有效地修改该集合,使其值为两个集合的并集。如果在操作进行中修改了指定的集合,则此操作的行为未定义。
异常:
UnsupportedOperationException: 如果addAll操作不被这个set支持
ClassCastException:如果这个指定集合中的某个元素的类阻止它被添加到这个set
NullPointerException:如果这个指定集合中一个或多个元素为null,而set不允许null元素。或者指定集合为null
IllegalArgumentException:如果这个指定集合中某个元素的某些属性阻止它被添加到这个set

11)retainAll

boolean retainAll(Collection<?> c)
只保留集合中包含在指定集合中的元素(可选操作)。换句话说,从集合中删除指定集合中不包含的所有元素。如果指定的集合也是一个集合,则此操作将有效地修改该集合,使其值为两个集合的交集。
返回true如果这个set被修改。
异常:
ClassCastException:如果这个set中的某个元素的类与指定集合不兼容
NullPointerException:如果这个set包含null而指定集合不允许null元素,或者指定集合为null
UnsupportedOperationException:如果retainAll操作不被这个set支持

12)removeAll

boolean removeAll(Collection<?> c)
从集合中删除指定集合中包含的所有元素(可选操作)。如果指定的集合也是一个集合,则此操作将有效地修改该集合,使其值为两个集合的非对称集合差值。
返回true如果这个set被修改。
异常:
ClassCastException:如果这个set中的某个元素的类与指定集合不兼容
NullPointerException:如果这个set包含null而指定集合不允许null元素,或者指定集合为null
UnsupportedOperationException:如果removeAll操作不被这个set支持

13)clear

void clear()
从集合中删除所有元素(可选操作)。该调用返回后,集合将为空。
异常:
UnsupportedOperationException: 如果clear操作不被这个set支持
14)equals
boolean equals(Object o)
比较指定的对象与此集合是否相等。如果指定的对象也是一个集合,两个集合的大小相同,并且指定集合的每个成员都包含在这个集合中(或者相同地,这个集合的每个成员都包含在指定的集合中),则返回true。这个定义确保equals方法在set接口的不同实现中正常工作。

15)hashCode

int hashCode()
返回该集合的哈希码值。集合的哈希码定义为集合中元素的哈希码之和,其中null元素的哈希码定义为零。这确保了s1.equals(s2)对于任意两个集合s1和s2意味着s1. hashcode ()==s2. hashcode(),这是Object.hashCode()的通用契约所要求的。

16)spliterator

default Spliterator spliterator()
在这个集合中的元素上创建一个拆分器。
Spliterator会报告Spliterator. distinct。实现应记录额外特征值的报告。

推荐阅读:
1、java图片上传服务器及客户端显示图片
2、SSM+Layui实现文件上传服务器
3、Java8实现对List<Map<String,Object>>多条件排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值