Set

1 概述

不包含重复元素(值)的collection,并且最多包含一个null元素。
无序(存储和取出不一致)

“==” 对于基本数据类型,它是值比较;对于引用数据类型,它是地址比较,若是new了两个对象,则返回false。
“equals” 对于object类,是比较地址,但对于大部分类都会重写equals类,重写之后对于两个相同的内容,则返回true。

2 Hashset

1.HashSet原理

  • 使用Set集合需要去掉重复元素,若存储的时候逐个equals()比较,效率较低,哈希算法提高了去重复的效率,降低了使用equals()方法的次数
  • HashSet存储对象的时候,add()方法底层依赖于双列集合HashMap,它依赖于两个方法 equals()和hashCode(),先调用对象的hashCode()方法得到一个哈希值,然后在集合中查找是否有哈希值相同的对象。

如果没有哈希值相同的对象就直接存入集合;如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较,比较结果为false就存入,true则不存。

2.使用Set集合添加自定义对象, 自定义对象类本身没有重写hashCode()和equals()方法,所以应该在自定义类中重写。

3.可以根据这一特性,产生1-20的不重复的随机数。

            HashSet<Integer> hs = new HashSet<>();        //创建哈希set
            Random r = new Random();                    //创建随机数对象
            
            while(hs.size() < 10) {
                int num = r.nextInt(20) + 1;            //生成1到20的随机数
                hs.add(num);
            }
            
            for (Integer integer : hs) {                //遍历集合
                System.out.println(integer);            //打印每一个元素
            }

3 LinkedHashSet

在保证元素唯一的基础上,可以保证元素存取顺序的一致。

4 TreeSet

1.可以保证元素唯一,可指定一个顺序,对象存入后按指定的顺序排序。
2.使用方式:(了解)
基于 TreeMap 的 NavigableSet 实现。
有两种排序方式:A-自然排序,也是默认排序(实现Comparable),B-比较器排序。取决于构造方法。
注意,此实现不是同步的。如果多个线程同时访问一个 TreeSet,而其中至少一个线程修改了该 set,那么它必须外部同步。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值