集合类---set

定义:一个不包含重复元素的collection。set 不包含满足 e1.equals(e2) 的元素对 e1e2,并且最多包含一个 null 元素,不保证集合里元素的顺序。

方法使用详解:

1.int size()

返回 set 中的元素数(其容量)。如果 set 包含多个 Integer.MAX_VALUE 元素,则返回 Integer.MAX_VALUE。 

2.boolean isEmpty()

如果 set 不包含元素,则返回 true

3.boolean contains(Object o)

如果 set 包含指定的元素,则返回 true。更确切地讲,当且仅当 set 包含满足 (o==null ? e==null : o.equals(e)) 的元素 e 时返回 true。  
抛出:
ClassCastException - 如果指定元素的类型与此 set 不兼容(可选)
NullPointerException - 如果指定的元素为 null 并且此 set 不允许 null 元素(可选)

4.Object[] toArray()

返回一个包含 set 中所有元素的数组。如果此 set 对其迭代器返回的元素的顺序作出了某些保证,那么此方法也必须按相同的顺序返回这些元素。

5.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() 在功能上是相同的。
抛出:
ArrayStoreException - 如果指定数组的运行时类型不是此 set 中所有元素的运行时类型的超类型
NullPointerException - 如果指定的数组为 null

6.boolean add(E e)

如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。更确切地讲,如果此 set 没有包含满足 (e==null ? e2==null : e.equals(e2)) 的元素 e2,则向该 set 中添加指定的元素 e。如果此 set 已经包含该元素,则该调用不改变此 set 并返回 false。结合构造方法上的限制,这就可以确保 set 永远不包含重复的元素。

上述规定并未暗示 set 必须接受所有元素;set 可以拒绝添加任意特定的元素,包括 null,并抛出异常。

抛出:

UnsupportedOperationException - 如果此 set 不支持 add 操作

ClassCastException - 如果指定元素的类不允许它添加到此 set

NullPointerException - 如果指定的元素为 null 并且此 set 不允许 null 元素IllegalArgumentException - 如果指定元素的某些属性不允许它添加到此 set

7.boolean remove(Object o)

如果 set 中存在指定的元素,则将其移除(可选操作)。更确切地讲,如果此 set 中包含满足 (o==null ? e==null : o.equals(e)) 的元素 e,则移除它。如果此 set 包含指定的元素(或者此 set 由于调用而发生更改),则返回 true(一旦调用返回,则此 set 不再包含指定的元素)。 
抛出:
ClassCastException - 如果指定元素的类型与此 set 不兼容(可选)NullPointerException - 如果指定的元素为 null,并且此 set 不允许 null 元素(可选)UnsupportedOperationException - 如果此 set 不支持 remove 操作

8.boolean containsAll(Collection<?> c)

如果此 set 包含指定 collection 的所有元素,则返回 true。如果指定的 collection 也是一个 set,那么当该 collection 是此 set 的子集 时返回 true
抛出:
ClassCastException - 如果指定 collection 中的一个或多个元素的类型与此 set 不兼容(可选)
NullPointerException - 如果指定的 collection 包含一个或多个 null 元素并且此 set 不允许 null 元素(可选),或者指定的 collection 为 null

9.boolean addAll(Collection<? extends E> c)

如果 set 中没有指定 collection 中的所有元素,则将其添加到此 set 中(可选操作)。如果指定的 collection 也是一个 set,则 addAll 操作会实际修改此 set,这样其值是两个 set 的一个并集。如果操作正在进行的同时修改了指定的 collection,则此操作的行为是不确定的。 
抛出:
UnsupportedOperationException - 如果 set 不支持 addAll 操作
ClassCastException - 如果某些指定 collection 元素的类不允许它添加到此 setNullPointerException - 如果指定的 collection 包含一个或多个 null 元素并且此 set 不允许 null 元素,或者指定的 collection 为 null
IllegalArgumentException - 如果指定 collection 元素的某些属性不允许它添加到此 set

10.boolean removeAll(Collection<?> c)

移除 set 中那些包含在指定 collection 中的元素(可选操作)。如果指定的 collection 也是一个 set,则此操作会实际修改此 set,这样其值是两个 set 的一个不对称差集。 
抛出:
UnsupportedOperationException - 如果此 set 不支持 removeAll 操作
ClassCastException - 如果此 set 元素的类与指定的 collection 不兼容(可选)NullPointerException - 如果此 set 包含 null 元素并且指定的 collection 不允许 null 元素(可选),或者指定的 collection 为 null

11.void clear()

移除此 set 中的所有元素(可选操作)。此调用返回后该 set 将是空的。

12.boolean equals(Object o)

比较指定对象与此 set 的相等性。如果指定的对象也是一个 set,两个 set 的大小相同,并且指定 set 的所有成员都包含在此 set 中(或者,此 set 的所有成员都包含在指定的 set 中也一样),则返回 true。此定义确保了 equals 方法可在不同的 set 接口实现间正常工作。 

13.int hashCode()

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

 

在set对象元素中要重写equals和hashCode方法。

详解:http://blog.csdn.net/zpf336/article/details/42397415

为什么重写equals时一定要重写hashcode:

hashcode默认返回堆里面的地址,不重写的话,如果你用一个set,两个对象可能内容相同但是hashcode却不一样,set会认为这是两个不一样的对象,set里面就会出现重复的内容

posted on 2017-11-13 17:04  二十年后20  阅读(177)  评论(0编辑  收藏  举报

导航