持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情
大家好,我是尚影嫣🌷,一名Java后端程序媛。如果您喜欢我的文章,欢迎点赞➕关注❤️,让我们一起成为更好的我们~🥰
Set集合
Set继承自Collection接口,与Collection基本上一样,没有提供任何额外的方法。
Set集合是一个存储无序且不重复的集合,单值存储。null只能存一个。
HashSet按Hash算法来存储集合中的元素,所以具有良好的存储和查找性能。
HashSet添加元素能否成功,取决于该元素的hashCode()方法和equals()方法。
Set集合没有get方法,取数据只能用迭代器,forEach遍历,或者toArray转成数组。 方法如下:
public class CollectionDemo {
public static void main(String[] args) {
// LinkedList使用的是双向链表,增删快,查找慢
LinkedList<Integer> linkedList = new LinkedList<>();
//压栈
linkedList.push(10);
linkedList.push(20);
//弹栈
Integer i = linkedList.pop();
//打印出20
System.out.println(i);
//--------------set
Set<String> set = new HashSet();
set.add("1");
set.add("1");
set.add("2");
set.add("3");
//set没有get()方法,用迭代器取里面的值
Iterator it = set.iterator();
while (it.hasNext()) {
//使用迭代器时,next()每执行一次,指针会下移一位,地址值会+1
Object o = it.next();
System.out.println(o);
}
}
}
运行结果如下(重复的值没有添加进去)👇
总结
Set是无序的,先添加的元素不一定会排在前面。同时Set的元素不可重复,相同元素在Set中只会保留一份,可以利用Set的这个特性做集合去重。
在HashSet中,基本的操作都是有HashMap底层实现的,因为HashSet底层是用HashMap存储数据的。
向HashSet中添加元素的时候,会先计算元素的hashcode值,然后通过扰动计算和按位与的方式计算出这个元素的存储位置。如果这个位置为空,则将元素添加进去;如果不为空,会用equals方法比较元素是否相等,相等则不添加,否则找一个空位添加。