Set

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、前言 Java集合主要分为三种类型:Set(集)、List(列表)和Map(映射)。 先简单说下集合和数组的区...
    小怪聊职场阅读 11,557评论 4 54
  • 一、Serializable详解 Serializalbe这种简单机制是通过牺牲掉执行性能为代价换来的。通过Ser...
    kjy_112233阅读 5,931评论 0 5
  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX阅读 4,379评论 0 1
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,235评论 18 399
  • 《忆父》 宋凌云【清代】 吴树燕云断尺书,迢迢两地恨何如? 梦魂不惮长安...
    王书强666阅读 4,845评论 0 0

友情链接更多精彩内容