Home HashSet源码解析(JDK8)
Post
Cancel

HashSet源码解析(JDK8)

简介

HashSet是一个基于HashMap实现的无重复元素的集合。

原理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private transient HashMap<E,Object> map;

// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();

/**
    * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has
    * default initial capacity (16) and load factor (0.75).
    */
public HashSet() {
    map = new HashMap<>();
}

public HashSet(int initialCapacity, float loadFactor) {
    map = new HashMap<>(initialCapacity, loadFactor);
}

HashSet(int initialCapacity, float loadFactor, boolean dummy) {
    map = new LinkedHashMap<>(initialCapacity, loadFactor);
}

HashSet内部使用了HashMap来实现功能,HashMap的Key来作为无重复的区分。put进来的元素储存在Map的Key中,Value固定为Object用来区分空的情况。 预留了一个defalut范围的构造函数,用于LinkedHashSet来使用,保证可以和Map类似,保留插入顺序。

This post is licensed under CC BY 4.0 by the author.