欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Set

程序员文章站 2024-03-22 13:43:16
...

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,那么它必须外部同步。
Set

上一篇: EC2 连接 RDS

下一篇: hadoop3 EC测试