1.4 HashSet 底层完整解析

3 阅读1分钟

1.4.1 底层封装 HashMap

private transient HashMap<E,Object> map;
// 全局静态虚拟占位对象,所有value统一使用,节省内存
private static final Object PRESENT = new Object();

文字解释:HashSet 只存 key,value 统一使用静态 Object,无需重复创建对象。

1.4.2 核心方法注释

// 添加元素,map.put返回null代表无重复,添加成功
public boolean add(E e) {
    return map.put(e, PRESENT) == null;
}
// 判断元素是否存在,调用map的containsKey
public boolean contains(Object o) {
    return map.containsKey(o);
}
// 删除元素,判断返回值是否为占位对象
public boolean remove(Object o) {
    return map.remove(o) == PRESENT;
}

1.4.3 核心特性

  1. 无序:HashMap key 无序;
  2. 仅允许 1 个 null 元素;
  3. 无 get (int),无下标概念;
  4. 非线程安全。