开发工具与关键技术:JAVA Set
作者:听民谣的老猫
撰写时间:2020/12/28 15:30
Set集合体系结构:
*
Set特点:存入集合的顺序和取出集合的顺序不一致 ,没有索引 ,存入集合的元素没有重复。
HashSet集合
public class HashSetDemo {
public static void main(String[] args) {
//创建集合对象
//Set set = new HashSet();
HashSet<String> set = new HashSet<String>();
//添加元素
set.add("hello");
set.add("world");
}
}
随堂笔记:
* 通过查看源码发现:
* HashSet的add()方法,首先会使用当前集合中的每一个元素和新添加的元素进行hash值比较,
* 如果hash值不一样,则直接添加新的元素
* 如果hash值一样,比较地址值或者使用equals方法进行比较
* 比较结果一样,则认为是重复不添加
* 所有的比较结果都不一样则添加
HashSet和ArrayList 的add比较:
ArrayList:
public class HashSetDemo {
public static void main(String[] args) {
//创建集合对象
ArrayList al = new ArrayList();
//添加元素
al.add("hello");
al.add("world");
al.add("world");
}
}
遍历集合:
HashSet:
public class HashSetDemo {
public static void main(String[] args) {
//创建集合对象
//Set set = new HashSet();
HashSet<String> set = new HashSet<String>();
//添加元素
set.add("hello");
set.add("world");
set.add("world");
}
}
遍历集合:
ArrayList新增能重复是因为ArrayList采用链表结构,它的新增只需要修改下个元素的地址即可。
HashSet 新增一样,比较hash值,地址值或者使用equals方法进行比较比较结果一样,则认为是重复不添加,所有的比较结果都不一样则添加
HashSet唯一性原理
规则:新添加到HashSet集合的元素都会与集合中已有的元素一一比较
首先比较哈希值(每个元素都会调用hashCode()产生一个哈希值)
如果新添加的元素与集合中已有的元素的哈希值都不同,新添加的元素存入集合
如果新添加的元素与集合中已有的某个元素哈希值相同,此时还需要调用equals(Object obj)比较
如果equals(Object obj)方法返回true,说明新添加的元素与集合中已有的某个元素的属性值相同,那么新添加的元素不存入集合
如果equals(Object obj)方法返回false, 说明新添加的元素与集合中已有的元素的属性值都不同, 那么新添加的元素存入集合