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,那么它必须外部同步。
上一篇: EC2 连接 RDS
下一篇: hadoop3 EC测试