Set

作者: Cajesse佳泽 | 来源:发表于2017-04-03 20:14 被阅读0次

A collection that contains no duplicate elements
一个没有重复元素的Collection

这个集合代表了数学上的集合. 也就是说

  1. 一个Set里只有一个null;
  2. Set里不会有出现两个对象出现 obj1.equals.(obj2)

在Collection的基础上 , 集合在 addd, equals hashcode 还有所有的构造方法上添加了额外的规范(构造方法必须生成一个符合定义的Set对象,这不是废话吗?不过这个确实不是废话,后面就知道了). 另外, Collection 中的其他方法, Set也显式声明了, 但并没有给这些声明的方法添加额外的约束,也就是说并没有这些方法的意义和Collection的是相同的(仅仅是为了方便).

注意:

  1. 禁止向Set把自身作为元素添加进去. 例如 : set.add(set)
  2. 当易变的对象作为Set的元素时,应该充分考虑是不是可行的.因为 当Set里的元素的值发生了改变,即使影响了其equals方法时,Set并不会做出反应.请看例子:
    Set<DemoObj> set = new HashSet<>();
    DemoObj demo1 = new DemoObj(1);
    DemoObj demo2 = new DemoObj(2);
    DemoObj demoCopy2 = new DemoObj(2);
    set.add(demo1);
    set.add(demo2);
    set.add(demoCopy2);
    System.out.println(set.size());//2
    demo1.id = 2;
    System.out.println(set.size());//2
    这下就知道为什么那句话不是废话了吧. 这个时候set里面的两个元素demo1.equals(demo2);

一些Set的实现类约束其插入的元素的合法性, 比如不能为null,类型检查等等.. 如果插入一个非法的元素会抛出一个运行期异常, 查询一个非法的元素可能会抛出异常也可能会直接返回false

int size();

返回这个Set中的元素个数, 如果元素个数大于Integer.MAX_VALUE 就返回Integer.MAX_VALUE;

boolean isEmpty();

返回这个Set的元素个数是不是0

boolean contains(Object o);

判断Set是否含有对象o

Iterator<E> iterator();

返回一个非指定顺序的迭代器

Object[] toArray();

返回一个含有Set中所有元素的数组.记住返回值不是E[]而是Object[].使用时需要强转

<T> T[] toArray(T[] a);

返回一个数组b, 包含所有Set内的元素, b.length = max(a.length,set.size());
注意, 当a.length > set.size()时
b的前set.size个元素为set的元素, 其余为a数组中的后 a.length - set.size()的元素. 也就是说, b为a的前set.size()个元素被set的元素覆盖后的结果.

boolean add(E e);

将一个元素e添加进set.
如果e已经存在set里, 会返回false;
如果e是一个非法的元素,会抛出一个运行期异常;

boolean remove(Object o);

移除set中的对象o.成功移除返回true; 如果set中不含有元素e使得e.equals(o), 那么返回false.

boolean containsAll(Collection<?> c);

相当于对参数c进行一个遍历调用boolean contains(Object o);

boolean addAll(Collection<? extends E> c);

相当于对参数c进行一个遍历调用boolean add(E e);

boolean retainAll(Collection<?> c);

保留Collection下的元素,移除其余元素

boolean removeAll(Collection<?> c);

相当于对参数c进行一个遍历调用boolean remove(Object e);

void clear();

移除set中所有元素.

boolean equals(Object o);

判断两个集合包含的元素及其个数是否完全一致.

int hashCode();

返回Set中所有元素的hashCode总和.

default Spliterator<E> spliterator(){}

返回该set的并行迭代器Spliterator

相关文章

网友评论

      本文标题:Set

      本文链接:https://www.haomeiwen.com/subject/htdnottx.html