JDK8util包解读-HashSet

100 阅读1分钟

文本主要介绍HashSet的数据结构和关键方法

基本介绍

HashSet 是 Java 中的一个集合类,它实现了 Set 接口,并且使用哈希表HashMap作为其底层数据结构。

image.png

因此具有快速的插入、查找和删除操作的特点。

HashSet 的特点如下:

  1. 唯一性:HashSet 中的元素是唯一的,不允许重复元素。当试图向 HashSet 中添加重复元素时,操作将被忽略。
  2. 无序性:HashSet 中的元素没有固定的顺序,元素的存储顺序可能与插入顺序不同。
  3. 允许空元素:HashSet 允许存储空元素(null)。

数据结构

使用HashMap作为存储的数据结构,Key为HashSet的元素,Value为一个空对象

private transient HashMap<E,Object> map;

private static final Object PRESENT = new Object();

public HashSet() {
    map = new HashMap<>();
}

public HashSet(Collection<? extends E> c) {
    map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
    addAll(c);
}

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

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

核心方法

其中关键实现方法都是利用HashMap能力

public boolean add(E e) {
    return map.put(e, PRESENT)==null;
}
public boolean remove(Object o) {
    return map.remove(o)==PRESENT;
}
public void clear() {
    map.clear();
}
public boolean contains(Object o) {
    return map.containsKey(o);
}
public boolean isEmpty() {
    return map.isEmpty();
}

其实现不叫简答,不再赘述