Set(一):HashSet、LinkedHasSet源码浅析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Set(一):HashSet、LinkedHasSet源码浅析相关的知识,希望对你有一定的参考价值。

参考技术A HashSet 基于 HashMap 实现的, HashSet 是一个没有重复元素的集合,其实是我们存入的值都是作为 HashSet 内部map的key值,value值都是一样大的

我们来看下 HashSet 的构造方法:

来简单看下 addAll()

可以看到 addAll() 先遍历元素,然后将遍历出来的元素传入到 add() 里面,最后将传入的元素作为key值,保存到 map 对象里面,value值为默认的空对象 PRESENT

HashSet 中的增删改查都是基于 HashMap 的,所以对 HashSet 的操作等同于对 HashMap 的操作,包括迭代器

遍历 HashSet 的两种方式:

可以看到输出的元素是无序的,而不像list那样输入元素的顺序与输出元素的顺序是相同的

LinkedHashSet 继承于HashSet,其构造方法实现了 HashSet 中实现 LinkedHashMap 的构造方法,元素的正删改查完全由父类 HashSet 实现,所以 LinkedHashSet 类中除了构造方法之外,并没有其他的什么操作方法

输出为:
3005-3005/com.chuan.jun I/wz:
for循环: chuan--0
for循环: chuan--1
for循环: chuan--2
for循环: chuan--3
for循环: chuan--4

可以看到相对于 HashSet 元素的输入顺序与输入顺序是一致的

以上是关于Set(一):HashSet、LinkedHasSet源码浅析的主要内容,如果未能解决你的问题,请参考以下文章

跟王老师学集合:Set接口和HashSet类

Java学习(set接口HashSet集合)

set接口

java-Set接口

由浅入深理解java集合——集合 Set

HashSet