你的位置:首页 > Java教程

[Java教程]浅谈为之奋斗过的Set接口


Set接口

Set接口存储一组唯一,无序的对象

HashSet 是Set接口常用的实现类

HashSet允许集合元素值为null 操作数据的方法与List类似

Set接口不存在get()方法

set 是一个不包含重复元素的集合(collction)。Set接口中的函数都是从Collection继承而来。

但限制了add 的使用,需要其不能添加重复元素。


public interface Set<E>extends Collection<E>

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

在所有构造方法以及 addequalshashCode 方法的协定上,Set 接口还加入了其他规定,这些规定超出了从 Collection 接口所继承的内容。出于方便考虑,它还包括了其他继承方法的声明(这些声明的规范已经专门针对 Set 接口进行了修改,但是没有包含任何其他的规定)。

对这些构造方法的其他规定是(不要奇怪),所有构造方法必须创建一个不包含重复元素的 set(正如上面所定义的)。

注:如果将可变对象用作 set 元素,那么必须极其小心。如果对象是 set 中某个元素,以一种影响 equals 比较的方式改变对象的值,那么 set 的行为就是不确定的。此项禁止的一个特殊情况是不允许某个 set 包含其自身作为元素。

某些 set 实现对其所包含的元素有所限制。例如,某些实现禁止 null 元素,而某些则对其元素的类型所有限制。试图添加不合格的元素会抛出未经检查的异常,通常是 NullPointerExceptionClassCastException。试图查询不合格的元素是否存在可能会抛出异常,也可能简单地返回 false;某些实现会采用前一种行为,而某些则采用后者。概括地说,试图对不合格元素执行操作时,如果完成该操作后不会导致在 set 中插入不合格的元素,则该操作可能抛出一个异常,也可能成功,这取决于实现的选择。此接口的规范中将这样的异常标记为“可选”。

此接口是 Java Collections Framework 的成员。 

方法的详细信息:

sizeint size()返回 set 中的元素数(其容量)。如果 set 包含多个 Integer.MAX_VALUE 元素,则返回 Integer.MAX_VALUE。 指定者:接口 Collection<E> 中的 size返回:此 set 中的元素数(其容量)--------------------------------------------------------------------------------isEmptyboolean isEmpty()如果 set 不包含元素,则返回 true。 指定者:接口 Collection<E> 中的 isEmpty返回:如果此 set 不包含元素,则返回 true--------------------------------------------------------------------------------containsboolean contains(Object o)如果 set 包含指定的元素,则返回 true。更确切地讲,当且仅当 set 包含满足 (o==null ? e==null : o.equals(e)) 的元素 e 时返回 true。 指定者:接口 Collection<E> 中的 contains参数:o - 要测试此 set 中是否存在的元素 返回:如果此 set 包含指定的元素,则返回 true 抛出: ClassCastException - 如果指定元素的类型与此 set 不兼容(可选) NullPointerException - 如果指定的元素为 null 并且此 set 不允许 null 元素(可选)--------------------------------------------------------------------------------iteratorIterator<E> iterator()返回在此 set 中的元素上进行迭代的迭代器。返回的元素没有特定的顺序(除非此 set 是某个提供顺序保证的类的实例)。 指定者:接口 Collection<E> 中的 iterator指定者:接口 Iterable<E> 中的 iterator返回:在此 set 中的元素上进行迭代的迭代器--------------------------------------------------------------------------------toArrayObject[] toArray()返回一个包含 set 中所有元素的数组。如果此 set 对其迭代器返回的元素的顺序作出了某些保证,那么此方法也必须按相同的顺序返回这些元素。 由于此 set 不维护对返回数组的任何引用,因而它是安全的。(换句话说,即使此 set 受到数组的支持,此方法也必须分配一个新的数组)。因此,调用者可以随意修改返回的数组。 此方法充当基于数组的 API 与基于 collection 的 API 之间的桥梁。 指定者:接口 Collection<E> 中的 toArray返回:包含此 set 中所有元素的数组--------------------------------------------------------------------------------toArray<T> T[] toArray(T[] a)返回一个包含此 set 中所有元素的数组;返回数组的运行时类型是指定数组的类型。如果指定的数组能容纳该 set,则它将在其中返回。否则,将分配一个具有指定数组的运行时类型和此 set 大小的新数组。 如果指定的数组能容纳此 set,并有剩余的空间(即该数组的元素比此 set 多),那么会将列表中紧接该 set 尾部的元素设置为 null。(只有在调用者知道此 set 不包含任何 null 元素时才能用此方法确定此 set 的长度)。 如果此 set 对其迭代器返回的元素的顺序作出了某些保证,那么此方法也必须按相同的顺序返回这些元素。 像 toArray() 方法一样,此方法充当基于数组的 API 与基于 collection 的 API 之间的桥梁。更进一步说,此方法允许对输出数组的运行时类型上进行精确控制,在某些情况下,可以用来节省分配开销。 假定 x 是只包含字符串的一个已知 set。以下代码用来将该 set 转储到一个新分配的 String 数组:   String[] y = x.toArray(new String[0]);注意,toArray(new Object[0]) 和 toArray() 在功能上是相同的。 指定者:接口 Collection<E> 中的 toArray参数:a - 存储此 set 中元素的数组(如果其足够大);否则将为此分配一个具有相同运行时类型的新数组。 返回:包含此 set 中所有元素的数组 抛出: ArrayStoreException - 如果指定数组的运行时类型不是此 set 中所有元素的运行时类型的超类型 NullPointerException - 如果指定的数组为 null--------------------------------------------------------------------------------addboolean add(E e)如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。更确切地讲,如果此 set 没有包含满足 (e==null ? e2==null : e.equals(e2)) 的元素 e2,则向该 set 中添加指定的元素 e。
如果此 set 已经包含该元素,则该调用不改变此 set 并返回 false。结合构造方法上的限制,这就可以确保 set 永远不包含重复的元素。 上述规定并未暗示 set 必须接受所有元素;set 可以拒绝添加任意特定的元素,包括 null,并抛出异常,这与 Collection.add 规范中所描述的一样。每个 set 实现应该明确地记录对其可能包含元素的所有限制。 指定者:接口 Collection<E> 中的 add参数:e - 要添加到 set 中的元素 返回:如果 set 尚未包含指定的元素,则返回 true 抛出: UnsupportedOperationException - 如果此 set 不支持 add 操作 ClassCastException - 如果指定元素的类不允许它添加到此 set NullPointerException - 如果指定的元素为 null 并且此 set 不允许 null 元素 IllegalArgumentException - 如果指定元素的某些属性不允许它添加到此 set--------------------------------------------------------------------------------removeboolean remove(Object o)如果 set 中存在指定的元素,则将其移除(可选操作)。更确切地讲,如果此 set 中包含满足 (o==null ? e==null : o.equals(e)) 的元素 e,则移除它。
如果此 set 包含指定的元素(或者此 set 由于调用而发生更改),则返回 true(一旦调用返回,则此 set 不再包含指定的元素)。 指定者:接口 Collection<E> 中的 remove参数:o - 从 set 中移除的对象(如果存在) 返回:如果此 set 包含指定的对象,则返回 true 抛出: ClassCastException - 如果指定元素的类型与此 set 不兼容(可选) NullPointerException - 如果指定的元素为 null,并且此 set 不允许 null 元素(可选) UnsupportedOperationException - 如果此 set 不支持 remove 操作--------------------------------------------------------------------------------containsAllboolean containsAll(Collection<?> c)如果此 set 包含指定 collection 的所有元素,则返回 true。如果指定的 collection 也是一个 set,那么当该 collection 是此 set 的子集 时返回 true。 指定者:接口 Collection<E> 中的 containsAll参数:c - 检查是否包含在此 set 中的 collection 返回:如果此 set 包含指定 collection 中的所有元素,则返回 true 抛出: ClassCastException - 如果指定 collection 中的一个或多个元素的类型与此 set 不兼容(可选) NullPointerException - 如果指定的 collection 包含一个或多个 null 元素并且此 set 不允许 null 元素(可选),或者指定的 collection 为 null另请参见:contains(Object)--------------------------------------------------------------------------------addAllboolean addAll(Collection<? extends E> c)如果 set 中没有指定 collection 中的所有元素,则将其添加到此 set 中(可选操作)。如果指定的 collection 也是一个 set,则 addAll 操作会实际修改此 set,这样其值是两个 set 的一个并集。
如果操作正在进行的同时修改了指定的 collection,则此操作的行为是不确定的。 指定者:接口 Collection<E> 中的 addAll参数:c - 包含要添加到此 set 中的元素的 collection 返回:如果此 set 由于调用而发生更改,则返回 true 抛出: UnsupportedOperationException - 如果 set 不支持 addAll 操作 ClassCastException - 如果某些指定 collection 元素的类不允许它添加到此 set NullPointerException - 如果指定的 collection 包含一个或多个 null 元素并且此 set 不允许 null 元素,或者指定的 collection 为 null IllegalArgumentException - 如果指定 collection 元素的某些属性不允许它添加到此 set另请参见:add(Object)--------------------------------------------------------------------------------retainAllboolean retainAll(Collection<?> c)仅保留 set 中那些包含在指定 collection 中的元素(可选操作)。
换句话说,移除此 set 中所有未包含在指定 collection 中的元素。如果指定的 collection 也是一个 set,则此操作会实际修改此 set,这样其值是两个 set 的一个交集。 指定者:接口 Collection<E> 中的 retainAll参数:c - 包含要保留到此 set 中的元素的 collection 返回:如果此 set 由于调用而发生更改,则返回 true 抛出: UnsupportedOperationException - 如果此 set 不支持 retainAll 操作 ClassCastException - 如果此 set 元素的类与指定的 collection 不兼容(可选) NullPointerException - 如果此 set 包含 null 元素并且指定的 collection 不支持 null 元素(可选),或者指定的 collection 为 null另请参见:remove(Object)--------------------------------------------------------------------------------removeAllboolean removeAll(Collection<?> c)移除 set 中那些包含在指定 collection 中的元素(可选操作)。如果指定的 collection 也是一个 set,则此操作会实际修改此 set,这样其值是两个 set 的一个不对称差集。 指定者:接口 Collection<E> 中的 removeAll参数:c - 包含要从此 set 中移除的元素的 collection 返回:如果此 set 由于调用而发生更改,则返回 true 抛出: UnsupportedOperationException - 如果此 set 不支持 removeAll 操作 ClassCastException - 如果此 set 元素的类与指定的 collection 不兼容(可选) NullPointerException - 如果此 set 包含 null 元素并且指定的 collection 不允许 null 元素(可选),或者指定的 collection 为 null另请参见:remove(Object), contains(Object)--------------------------------------------------------------------------------clearvoid clear()移除此 set 中的所有元素(可选操作)。此调用返回后该 set 将是空的。 指定者:接口 Collection<E> 中的 clear抛出: UnsupportedOperationException - 如果此 set 不支持 clear 方法--------------------------------------------------------------------------------equalsboolean equals(Object o)比较指定对象与此 set 的相等性。如果指定的对象也是一个 set,两个 set 的大小相同,并且指定 set 的所有成员都包含在此 set 中(或者,此 set 的所有成员都包含在指定的 set 中也一样),则返回 true。
此定义确保了 equals 方法可在不同的 set 接口实现间正常工作。 指定者:接口 Collection<E> 中的 equals覆盖:类 Object 中的 equals参数:o - 要与此 set 进行相等性比较的对象 返回:如果指定的对象等于此 set,则返回 true

----------------------------------------------------------------

hashCode

int hashCode()

返回 set 的哈希码值。一个 set 的哈希码定义为此 set 中所有元素的哈希码和,其中 null 元素的哈希码定义为零。这就确保对于任意两个 set s1s2 而言,s1.equals(s2) 就意味着 s1.hashCode()==s2.hashCode(),正如 Object.hashCode() 的常规协定所要求的那样。
指定者:
接口 Collection<E> 中的 hashCode
覆盖:
Object 中的 hashCode
返回:
此 set 的哈希码值

Set接口的实现类

HashSet类

public class HashSet<E>extends AbstractSet<E>implements Set<E>, Cloneable, Serializable

此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。

此类为基本操作提供了稳定性能,这些基本操作包括 addremovecontainssize,假定哈希函数将这些元素正确地分布在桶中。

对此 set 进行迭代所需的时间与 HashSet 实例的大小(元素的数量)和底层 HashMap 实例(桶的数量)的“容量”的和成比例。因此,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)。

注意,此实现不是同步的。如果多个线程同时访问一个哈希 set,而其中至少一个线程修改了该 set,那么它必须 保持外部同步。

这通常是通过对自然封装该 set 的对象执行同步操作来完成的。如果不存在这样的对象,则应该使用 Collections.synchronizedSet 方法来“包装” set。最好在创建时完成这一操作,以防止对该 set 进行意外的不同步访问:

  Set s = Collections.synchronizedSet(new HashSet(...));

此类的 iterator 方法返回的迭代器是快速失败 的:在创建迭代器之后,如果对 set 进行修改,除非通过迭代器自身的 remove 方法,否则在任何时间以任何方式对其进行修改,Iterator 都将抛出 ConcurrentModificationException

因此,面对并发的修改,迭代器很快就会完全失败,而不冒将来在某个不确定时间发生任意不确定行为的风险。

注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器在尽最大努力抛出 ConcurrentModificationException

因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误做法:迭代器的快速失败行为应该仅用于检测 bug。

此类是 Java Collections Framework 的成员。 

构造方法:

HashSetpublic HashSet()构造一个新的空 set,其底层 HashMap 实例的默认初始容量是 16,加载因子是 0.75。 --------------------------------------------------------------------------------HashSetpublic HashSet(Collection<? extends E> c)构造一个包含指定 collection 中的元素的新 set。使用默认的加载因子 0.75 和足以包含指定 collection 中所有元素的初始容量来创建 HashMap。 参数:c - 其中的元素将存放在此 set 中的 collection 抛出: NullPointerException - 如果指定的 collection 为 null--------------------------------------------------------------------------------HashSetpublic HashSet(int initialCapacity,        float loadFactor)构造一个新的空 set,其底层 HashMap 实例具有指定的初始容量和指定的加载因子。 参数:initialCapacity - 哈希映射的初始容量loadFactor - 哈希映射的加载因子 抛出: IllegalArgumentException - 如果初始容量小于零,或者加载因子为非正数--------------------------------------------------------------------------------HashSetpublic HashSet(int initialCapacity)构造一个新的空 set,其底层 HashMap 实例具有指定的初始容量和默认的加载因子(0.75)。 参数:initialCapacity - 哈希表的初始容量 抛出: IllegalArgumentException - 如果初始容量小于零

方法详细:

iteratorpublic Iterator<E> iterator()返回对此 set 中元素进行迭代的迭代器。返回元素的顺序并不是特定的。 指定者:接口 Iterable<E> 中的 iterator指定者:接口 Collection<E> 中的 iterator指定者:接口 Set<E> 中的 iterator指定者:类 AbstractCollection<E> 中的 iterator返回:对此 set 中元素进行迭代的 Iterator另请参见:ConcurrentModificationException--------------------------------------------------------------------------------sizepublic int size()返回此 set 中的元素的数量(set 的容量)。 指定者:接口 Collection<E> 中的 size指定者:接口 Set<E> 中的 size指定者:类 AbstractCollection<E> 中的 size返回:此 set 中的元素的数量(set 的容量)--------------------------------------------------------------------------------isEmptypublic boolean isEmpty()如果此 set 不包含任何元素,则返回 true。 指定者:接口 Collection<E> 中的 isEmpty指定者:接口 Set<E> 中的 isEmpty覆盖:类 AbstractCollection<E> 中的 isEmpty返回:如果此 set 不包含任何元素,则返回 true--------------------------------------------------------------------------------containspublic boolean contains(Object o)如果此 set 包含指定元素,则返回 true。 更确切地讲,当且仅当此 set 包含一个满足 (o==null ? e==null : o.equals(e)) 的 e 元素时,返回 true。 指定者:接口 Collection<E> 中的 contains指定者:接口 Set<E> 中的 contains覆盖:类 AbstractCollection<E> 中的 contains参数:o - 其在此 set 中的存在已得到测试的元素 返回:如果此 set 包含指定元素,则返回 true--------------------------------------------------------------------------------addpublic boolean add(E e)如果此 set 中尚未包含指定元素,则添加指定元素。更确切地讲,如果此 set 没有包含满足 (e==null ? e2==null : e.equals(e2)) 的元素 e2,则向此 set 添加指定的元素 e。
如果此 set 已包含该元素,则该调用不更改 set 并返回 false。 指定者:接口 Collection<E> 中的 add指定者:接口 Set<E> 中的 add覆盖:类 AbstractCollection<E> 中的 add参数:e - 将添加到此 set 中的元素 返回:如果此 set 尚未包含指定元素,则返回 true--------------------------------------------------------------------------------removepublic boolean remove(Object o)如果指定元素存在于此 set 中,则将其移除。更确切地讲,如果此 set 包含一个满足 (o==null ? e==null : o.equals(e)) 的元素 e,则将其移除。
如果此 set 已包含该元素,则返回 true(或者:如果此 set 因调用而发生更改,则返回 true)。(一旦调用返回,则此 set 不再包含该元素)。 指定者:接口 Collection<E> 中的 remove指定者:接口 Set<E> 中的 remove覆盖:类 AbstractCollection<E> 中的 remove参数:o - 如果存在于此 set 中则需要将其移除的对象 返回:如果 set 包含指定元素,则返回 true--------------------------------------------------------------------------------clearpublic void clear()从此 set 中移除所有元素。此调用返回后,该 set 将为空。 指定者:接口 Collection<E> 中的 clear指定者:接口 Set<E> 中的 clear覆盖:类 AbstractCollection<E> 中的 clear--------------------------------------------------------------------------------clonepublic Object clone()返回此 HashSet 实例的浅表副本:并没有复制这些元素本身。 覆盖:类 Object 中的 clone返回:此 set 的浅表副本另请参见:Cloneable

HashSet newsTitleSet = new HashSet();NewTitle car = new NewTitle(1, "飞机", "管理员");//增加元素newsTitleSet.add(car);//遍历集合for(Object obj :newsTitleList){  NewTitle title=(NewTitle)obj;  System.out.println(title.getTitleName());}

Treeset类

public class TreeSet<E>extends AbstractSet<E>implements NavigableSet<E>, Cloneable, Serializable基于 TreeMap 的 NavigableSet 实现。
使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。 此实现为基本操作(add、remove 和 contains)提供受保证的 log(n) 时间开销。 注意,如果要正确实现 Set 接口,则 set 维护的顺序(无论是否提供了显式比较器)必须与 equals 一致。(关于与 equals 一致 的精确定义,请参阅 Comparable 或 Comparator。)这是因为 Set 接口是按照 equals 操作定义的,
但 TreeSet 实例使用它的 compareTo(或 compare)方法对所有元素进行比较,因此从 set 的观点来看,此方法认为相等的两个元素就是相等的。即使 set 的顺序与 equals 不一致,其行为也是 定义良好的;它只是违背了 Set 接口的常规协定。 注意,此实现不是同步的。如果多个线程同时访问一个 TreeSet,而其中至少一个线程修改了该 set,那么它必须 外部同步。这一般是通过对自然封装该 set 的对象执行同步操作来完成的。
如果不存在这样的对象,则应该使用 Collections.synchronizedSortedSet 方法来“包装”该 set。此操作最好在创建时进行,以防止对 set 的意外非同步访问: SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...));此类的 iterator 方法返回的迭代器是快速失败 的:在创建迭代器之后,如果从结构上对 set 进行修改,除非通过迭代器自身的 remove 方法,
否则在其他任何时间以任何方式进行修改都将导致迭代器抛出 ConcurrentModificationException。因此,对于并发的修改,迭代器很快就完全失败,而不会冒着在将来不确定的时间发生不确定行为的风险。 注意,迭代器的快速失败行为无法得到保证,一般来说,存在不同步的并发修改时,不可能作出任何肯定的保证。快速失败迭代器尽最大努力抛出 ConcurrentModificationException。因此,编写依赖于此异常的程序的做法是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测 bug。 此类是 Java Collections Framework 的成员。

构造方法

TreeSetpublic TreeSet()构造一个新的空 set,该 set 根据其元素的自然顺序进行排序。插入该 set 的所有元素都必须实现 Comparable 接口。
另外,所有这些元素都必须是可互相比较的:对于 set 中的任意两个元素 e1 和 e2,执行 e1.compareTo(e2) 都不得抛出 ClassCastException。如果用户试图将违反此约束的元素添加到 set(例如,用户试图将字符串元素添加到其元素为整数的 set 中),
则 add 调用将抛出 ClassCastException。 --------------------------------------------------------------------------------TreeSetpublic TreeSet(Comparator<? super E> comparator)构造一个新的空 TreeSet,它根据指定比较器进行排序。插入到该 set 的所有元素都必须能够由指定比较器进行相互比较:
对于 set 中的任意两个元素 e1 和 e2,执行 comparator.compare(e1, e2) 都不得抛出 ClassCastException。如果用户试图将违反此约束的元素添加到 set 中,则 add 调用将抛出 ClassCastException。 参数:comparator - 将用来对此 set 进行排序的比较器。如果该参数为 null,则使用元素的自然顺序。--------------------------------------------------------------------------------TreeSetpublic TreeSet(Collection<? extends E> c)构造一个包含指定 collection 元素的新 TreeSet,它按照其元素的自然顺序进行排序。插入该 set 的所有元素都必须实现 Comparable 接口。另外,所有这些元素都必须是可互相比较的:
对于 set 中的任意两个元素 e1 和 e2,执行 e1.compareTo(e2) 都不得抛出 ClassCastException。 参数:c - 一个 collection,其元素将组成新的 set 抛出: ClassCastException - 如果 c 中的元素不是 Comparable,或者是不可相互比较的 NullPointerException - 如果指定 collection 为 null--------------------------------------------------------------------------------TreeSetpublic TreeSet(SortedSet<E> s)构造一个与指定有序 set 具有相同映射关系和相同排序的新 TreeSet。 参数:s - 一个有序 set,其元素将组成新 set 抛出: NullPointerException - 如果指定有序 set 为 null

方法详细信

 

iterator
public Iterator<E> iterator()返回在此 set 中的元素上按升序进行迭代的迭代器。 指定者:接口 Iterable<E> 中的 iterator指定者:接口 Collection<E> 中的 iterator指定者:接口 NavigableSet<E> 中的 iterator指定者:接口 Set<E> 中的 iterator指定者:类 AbstractCollection<E> 中的 iterator返回:在此 set 中的元素上按升序进行迭代的迭代器--------------------------------------------------------------------------------descendingIteratorpublic Iterator<E> descendingIterator()返回在此 set 元素上按降序进行迭代的迭代器。 指定者:接口 NavigableSet<E> 中的 descendingIterator返回:在此 set 元素上按降序进行迭代的迭代器--------------------------------------------------------------------------------descendingSetpublic NavigableSet<E> descendingSet()从接口 NavigableSet 复制的描述 返回此 set 中所包含元素的逆序视图。降序 set 受此 set 的支持,因此对此 set 的更改将反映在降序 set 中,反之亦然。如果在对任一 set 进行迭代的同时修改了任一 set(通过迭代器自己的 remove 操作除外),则迭代结果是不确定的。 返回 set 的顺序等于 Collections.reverseOrder(comparator())。表达式 s.descendingSet().descendingSet() 返回的 s 视图基本等于 s。 指定者:接口 NavigableSet<E> 中的 descendingSet返回:此 set 的逆序视图--------------------------------------------------------------------------------sizepublic int size()返回 set 中的元素数(set 的容量)。 指定者:接口 Collection<E> 中的 size指定者:接口 Set<E> 中的 size指定者:类 AbstractCollection<E> 中的 size返回:此 set 中的元素数(set 的容量)--------------------------------------------------------------------------------isEmptypublic boolean isEmpty()如果此 set 不包含任何元素,则返回 true。 指定者:接口 Collection<E> 中的 isEmpty指定者:接口 Set<E> 中的 isEmpty覆盖:类 AbstractCollection<E> 中的 isEmpty返回:如果此 set 不包含任何元素,则返回 true--------------------------------------------------------------------------------containspublic boolean contains(Object o)如果此 set 包含指定的元素,则返回 true。更确切地讲,当且仅当此 set 包含满足 (o==null ? e==null : o.equals(e)) 的元素 e 时,返回 true。 指定者:接口 Collection<E> 中的 contains指定者:接口 Set<E> 中的 contains覆盖:类 AbstractCollection<E> 中的 contains参数:o - 将检查是否包含在此 set 中的对象 返回:如果此 set 包含指定元素,则返回 true 抛出: ClassCastException - 如果指定对象无法与该 set 中的当前元素进行比较 NullPointerException - 如果指定元素为 null,并且此 set 使用自然顺序,或者其比较器不允许使用 null 元素--------------------------------------------------------------------------------addpublic boolean add(E e)将指定的元素添加到此 set(如果该元素尚未存在于 set 中)。更确切地讲,如果该 set 不包含满足 (e==null ? e2==null : e.equals(e2)) 的元素 e2,则将指定元素 e 添加到此 set 中。如果此 set 已经包含这样的元素,则该调用不改变此 set 并返回 false。 指定者:接口 Collection<E> 中的 add指定者:接口 Set<E> 中的 add覆盖:类 AbstractCollection<E> 中的 add参数:e - 要添加到此 set 的对象 返回:如果此 set 尚未包含指定元素,则返回 true 抛出: ClassCastException - 如果指定对象无法与此 set 的当前元素进行比较 NullPointerException - 如果指定元素为 null,并且此 set 使用自然顺序,或者其比较器不允许使用 null 元素--------------------------------------------------------------------------------removepublic boolean remove(Object o)将指定的元素从 set 中移除(如果该元素存在于此 set 中)。更确切地讲,如果 set 中包含满足 (o==null ? e==null : o.equals(e)) 的元素 e,则移除一个这样的元素。如果此 set 包含这样的元素(或者此 set 由于调用而发生更改),则返回 true。
(一旦调用返回,则此 set 不再包含这样的元素。) 指定者:接口 Collection<E> 中的 remove指定者:接口 Set<E> 中的 remove覆盖:类 AbstractCollection<E> 中的 remove参数:o - 将从此 set 中移除的对象(如果存在) 返回:如果此 set 包含指定元素,则返回 true 抛出: ClassCastException - 如果指定对象无法与该 set 中的当前元素进行比较 NullPointerException - 如果指定元素为 null,并且此 set 使用自然顺序,或者其比较器不允许使用 null 元素--------------------------------------------------------------------------------clearpublic void clear()移除此 set 中的所有元素。在此调用返回之后,set 将为空。 指定者:接口 Collection<E> 中的 clear指定者:接口 Set<E> 中的 clear覆盖:类 AbstractCollection<E> 中的 clear--------------------------------------------------------------------------------addAllpublic boolean addAll(Collection<? extends E> c)将指定 collection 中的所有元素添加到此 set 中。 指定者:接口 Collection<E> 中的 addAll指定者:接口 Set<E> 中的 addAll覆盖:类 AbstractCollection<E> 中的 addAll参数:c - 包含要添加到此 set 的元素的 collection 返回:如果此 set 由于调用而发生更改,则返回 true 抛出: ClassCastException - 如果提供的元素无法与 set 中的当前元素进行比较 NullPointerException - 如果指定 collection 为 null,或者任何元素为 null 并且此 set 使用自然顺序,或者其比较器不允许使用 null 元素另请参见:AbstractCollection.add(Object)--------------------------------------------------------------------------------subSetpublic NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)从接口 NavigableSet 复制的描述 返回此 set 的部分视图,其元素范围从 fromElement 到 toElement。如果 fromElement 和 toElement 相等,则返回的 set 为空,除非 fromExclusive 和 toExclusive 都为 true。返回的 set 受此 set 支持,所以在返回 set 中的更改将反映在此 set 中,反之亦然。返回 set 支持此 set 支持的所有可选 set 操作。 如果试图在返回 set 的范围之外插入元素,则返回的 set 将抛出 IllegalArgumentException。 指定者:接口 NavigableSet<E> 中的 subSet参数:fromElement - 返回 set 的低端点fromInclusive - 如果低端点要包含在返回的视图中,则为 truetoElement - 返回 set 的高端点toInclusive - 如果高端点要包含在返回的视图中,则为 true 返回:此 set 的部分视图,其元素范围从 fromElement(包括)到 toElement(不包括) 抛出: ClassCastException - 如果不能使用此 set 的比较器或者使用自然顺序(如果 set 没有比较器)比较 fromElement 和 toElement。如果 fromElement 或 toElement 不能与 set 中的当前元素进行比较,则实现可以(但不是必须)抛出此异常。 NullPointerException - 如果 fromElement 或 toElement 为 null,并且此 set 使用自然顺序,或者其比较器不允许使用 null 元素 IllegalArgumentException - 如果 fromElement 大于 toElement;如果此 set 本身有范围限制,并且 fromElement 或 toElement 位于范围的边界之外。从以下版本开始: 1.6 --------------------------------------------------------------------------------headSetpublic NavigableSet<E> headSet(E toElement, boolean inclusive)从接口 NavigableSet 复制的描述 返回此 set 的部分视图,其元素小于(或等于,如果 inclusive 为 true)toElement。返回的 set 受此 set 支持,所以在返回 set 中的更改将反映在此 set 中,反之亦然。返回 set 支持此 set 支持的所有可选 set 操作。 如果试图在返回 set 的范围之外插入元素,则返回的 set 将抛出 IllegalArgumentException。 指定者:接口 NavigableSet<E> 中的 headSet参数:toElement - 返回 set 的高端点inclusive - 如果高端点要包含在返回的视图中,则为 true 返回:此 set 的部分视图,其元素小于(或等于,如果 inclusive 为 true)toElement 抛出: ClassCastException - 如果 toElement 与此 set 的比较器不兼容(如果 set 没有比较器;如果 toElement 没有实现 Comparable)。如果 toElement 不能与 set 中的当前元素进行比较,则实现可以(但不是必须)抛出此异常。 NullPointerException - 如果 toElement 为 null,并且此 set 使用自然顺序,或者其比较器不允许使用 null 元素 IllegalArgumentException - 如果此 set 本身有范围限制,并且 toElement 位于范围的边界之外--------------------------------------------------------------------------------tailSetpublic NavigableSet<E> tailSet(E fromElement, boolean inclusive)从接口 NavigableSet 复制的描述 返回此 set 的部分视图,其元素大于(或等于,如果 inclusive 为 true)fromElement。返回的 set 受此 set 支持,所以在返回 set 中的更改将反映在此 set 中,反之亦然。返回 set 支持此 set 支持的所有可选 set 操作。 如果试图在返回 set 的范围之外插入元素,则返回的 set 将抛出 IllegalArgumentException。 指定者:接口 NavigableSet<E> 中的 tailSet参数:fromElement - 返回 set 的低端点inclusive - 如果低端点要包含在返回的视图中,则为 true 返回:此 set 的部分视图,其元素大于等于 fromElement 抛出: ClassCastException - 如果 fromElement 与此 set 的比较器不兼容(如果 set 没有任何比较器;如果 fromElement 没有实现 Comparable)。如果 fromElement 不能与 set 中的当前元素进行比较,则实现可以(但不是必须)抛出此异常。 NullPointerException - 如果 fromElement 为 null,并且此 set 使用自然顺序,或者其比较器不允许使用 null 元素 IllegalArgumentException - 如果此 set 本身有范围限制,并且 fromElement 位于范围的边界之外--------------------------------------------------------------------------------subSetpublic SortedSet<E> subSet(E fromElement, E toElement)从接口 NavigableSet 复制的描述 返回此 set 的部分视图,其元素从 fromElement(包括)到 toElement(不包括)。(如果 fromElement 和 toElement 相等,则返回空的 set)。返回的 set 受此 set 支持,所以在返回 set 中的更改将反映在此 set 中,反之亦然。返回的 set 支持此 set 支持的所有可选 set 操作。 如果试图在返回 set 的范围之外插入元素,则返回的 set 将抛出 IllegalArgumentException。 等效于 subSet(fromElement, true, toElement, false)。 指定者:接口 NavigableSet<E> 中的 subSet指定者:接口 SortedSet<E> 中的 subSet参数:fromElement - 返回 set 的低端点(包括)toElement - 返回 set 的高端点(不包括) 返回:此 set 的部分视图,其元素的范围从 fromElement(包括)到 toElement(不包括) 抛出: ClassCastException - 如果无法使用此 set 的比较器(如果 set 没有比较器,则使用自然顺序)比较 fromElement 和 toElement。如果 fromElement 或 toElement 不能与 set 中的当前元素进行比较,则实现可以(但不是必须)抛出此异常。 NullPointerException - 如果 fromElement 或 toElement 为 null,并且此 set 使用自然顺序,或者其比较器不允许使用 null 元素 IllegalArgumentException - 如果 fromElement 大于 toElement;如果此 set 本身有范围限制,并且 fromElement 或 toElement 位于范围的边界之外--------------------------------------------------------------------------------headSetpublic SortedSet<E> headSet(E toElement)从接口 NavigableSet 复制的描述 返回此 set 的部分视图,其元素严格小于 toElement。返回的 set 受此 set 支持,所以在返回 set 中的更改将反映在此 set 中,反之亦然。返回的 set 支持此 set 支持的所有可选 set 操作。 如果试图在返回 set 的范围之外插入元素,则返回的 set 将抛出 IllegalArgumentException。 等效于 headSet(toElement, false)。 指定者:接口 NavigableSet<E> 中的 headSet指定者:接口 SortedSet<E> 中的 headSet参数:toElement - 返回 set 的高端点(不包括) 返回:此 set 的部分视图,其元素严格小于 toElement 抛出: ClassCastException - 如果 toElement 与此 set 的比较器不兼容(如果 set 没有比较器;如果 toElement 没有实现 Comparable)。如果 toElement 不能与 set 中的当前元素进行比较,则实现可以(但不是必须)抛出此异常。 NullPointerException - 如果 toElement 为 null,并且此 set 使用自然顺序,或者其比较器不允许使用 null 元素 IllegalArgumentException - 如果此 set 本身有范围限制,并且 toElement 位于范围的边界之外--------------------------------------------------------------------------------tailSetpublic SortedSet<E> tailSet(E fromElement)从接口 NavigableSet 复制的描述 返回此 set 的部分视图,其元素大于等于 fromElement。返回的 set 受此 set 支持,所以在返回 set 中的更改将反映在此 set 中,反之亦然。返回的 set 支持此 set 支持的所有可选 set 操作。 如果试图在返回 set 的范围之外插入元素,则返回的 set 将抛出 IllegalArgumentException。 等效于 tailSet(fromElement, true)。 指定者:接口 NavigableSet<E> 中的 tailSet指定者:接口 SortedSet<E> 中的 tailSet参数:fromElement - 返回 set 的低端点(包括) 返回:此 set 的部分视图,其元素大于等于 fromElement 抛出: ClassCastException - 如果 fromElement 与此 set 的比较器不兼容(如果 set 没有比较器;如果 fromElement 没有实现 Comparable)。如果 fromElement 不能与 set 中的当前元素进行比较,则实现可以(但不是必须)抛出此异常。 NullPointerException - 如果 fromElement 为 null,并且此 set 使用自然顺序,或者其比较器不允许使用 null 元素 IllegalArgumentException - 如果此 set 本身有范围限制,并且 fromElement 位于范围的边界之外--------------------------------------------------------------------------------comparatorpublic Comparator<? super E> comparator()从接口 SortedSet 复制的描述 返回对此 set 中的元素进行排序的比较器;如果此 set 使用其元素的自然顺序,则返回 null。 指定者:接口 SortedSet<E> 中的 comparator返回:用来对此 set 中的元素进行排序的比较器;如果此 set 使用其元素的自然顺序,则返回 null--------------------------------------------------------------------------------firstpublic E first()从接口 SortedSet 复制的描述 返回此 set 中当前第一个(最低)元素。 指定者:接口 SortedSet<E> 中的 first返回:此 set 中当前第一个(最低)元素 抛出: NoSuchElementException - 如果此 set 为空--------------------------------------------------------------------------------lastpublic E last()从接口 SortedSet 复制的描述 返回此 set 中当前最后一个(最高)元素。 指定者:接口 SortedSet<E> 中的 last返回:此 set 中当前最后一个(最高)元素 抛出: NoSuchElementException - 如果此 set 为空--------------------------------------------------------------------------------lowerpublic E lower(E e)从接口 NavigableSet 复制的描述 返回此 set 中严格小于给定元素的最大元素;如果不存在这样的元素,则返回 null。 指定者:接口 NavigableSet<E> 中的 lower参数:e - 要匹配的值 返回:小于 e 的最大元素;如果不存在这样的元素,则返回 null 抛出: ClassCastException - 如果指定元素不能与 set 中的当前元素进行比较 NullPointerException - 如果指定元素为 null,并且此 set 使用自然顺序,或者其比较器不允许使用 null 元素--------------------------------------------------------------------------------floorpublic E floor(E e)从接口 NavigableSet 复制的描述 返回此 set 中小于等于给定元素的最大元素;如果不存在这样的元素,则返回 null。 指定者:接口 NavigableSet<E> 中的 floor参数:e - 要匹配的值 返回:小于等于 e 的最大元素;如果不存在这样的元素,则返回 null 抛出: ClassCastException - 如果指定元素不能与 set 中的当前元素进行比较 NullPointerException - 如果指定元素为 null,并且此 set 使用自然顺序,或者其比较器不允许使用 null 元素--------------------------------------------------------------------------------ceilingpublic E ceiling(E e)从接口 NavigableSet 复制的描述 返回此 set 中大于等于给定元素的最小元素;如果不存在这样的元素,则返回 null。 指定者:接口 NavigableSet<E> 中的 ceiling参数:e - 要匹配的值 返回:大于等于 e 的最小元素;如果不存在这样的元素,则返回 null 抛出: ClassCastException - 如果指定元素不能与 set 中的当前元素进行比较 NullPointerException - 如果指定元素为 null,并且此 set 使用自然顺序,或者其比较器不允许使用 null 元素--------------------------------------------------------------------------------higherpublic E higher(E e)从接口 NavigableSet 复制的描述 返回此 set 中严格大于给定元素的最小元素;如果不存在这样的元素,则返回 null。 指定者:接口 NavigableSet<E> 中的 higher参数:e - 要匹配的值 返回:大于 e 的最小元素;如果不存在这样的元素,则返回 null 抛出: ClassCastException - 如果指定元素不能与 set 中的当前元素进行比较 NullPointerException - 如果指定元素为 null,并且此 set 使用自然顺序,或者其比较器不允许使用 null 元素-------------------------------------------------------------------------------pollFirstpublic E pollFirst()从接口 NavigableSet 复制的描述 获取并移除第一个(最低)元素;如果此 set 为空,则返回 null。 指定者:接口 NavigableSet<E> 中的 pollFirst返回:第一个元素;如果此 set 为空,则返回 null--------------------------------------------------------------------------------pollLastpublic E pollLast()从接口 NavigableSet 复制的描述 获取并移除最后一个(最高)元素;如果此 set 为空,则返回 null。 指定者:接口 NavigableSet<E> 中的 pollLast返回:最后一个元素;如果此 set 为空,则返回 null--------------------------------------------------------------------------------clonepublic Object clone()返回 TreeSet 实例的浅表副本。(这些元素本身不被复制。) 覆盖:类 Object 中的 clone返回:此 set 的浅表副本

代码案例

public class TestSet {   public static void main(String [] args)   {     Set<Integer> hashSet = new HashSet<Integer>();     Set<Integer> treeSet = new TreeSet<Integer>();     hashSet = fillSet(hashSet);     System.out.println(hashSet);     treeSet = fillSet(treeSet);     System.out.println(treeSet);   }   public static Set<Integer> fillSet(Set<Integer> set)   {     while(set.size() < 7)     {       set.add((int)(Math.random()*35+1));     }     return set;   } }