乐趣区

HashSet源码分析

hashSet 内部是利用 hashMap 实现的,将值存在 hashmap 的 key 上这也是为什么 hashset 不允许存取重复值得原因。
数据结构
private transient HashMap<E,Object> map;

// 与支持映射中的对象关联的虚拟值 ,map 中的 value,只是一个无意义的空对象
private static final Object PRESENT = new Object();
默认的构造函数
public HashSet() {
map = new HashMap<>();
}
查询内容的时候实际是在 map 中查询 key
public boolean contains(Object o) {
return map.containsKey(o);
}
增加的时候,在 key 的位置放置要存的值,在 value 中放置一个没有意义的空对象
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}

退出移动版