今天我们来探索一下HashSet,TreeSet与LinkedHashSet的基本原理与源码实现,由于这三个set都是基于之前文章的三个map进行实现的,所以推荐大家先看一下前面有关map的文章,结合使用味道更佳。
具体代码在我的GitHub中可以找到
文章首发于我的个人博客:
更多关于Java后端学习的内容请到我的CSDN博客上查看:
HashSet
定义
public class HashSet
extends AbstractSet
implements Set, Cloneable, java.io.Serializable
HashSet继承AbstractSet类,实现Set、Cloneable、Serializable接口。其中AbstractSet提供
Set 接口的骨干实现,从而最大限度地减少了实现此接口所需的工作。
==Set接口是一种不包括重复元素的Collection,它维持它自己的内部排序,所以随机访问没有任何意义。==
本文基于1.8jdk进行源码分析。
基本属性
基于HashMap实现,底层使用HashMap保存所有元素
private transient HashMap map;
//定义一个Object对象作为HashMap的value
private static final Object PRESENT = new Object();
构造函数
public HashSet() {
map = new HashMap<>();
}
public HashSet(Collection