JDK 源码解析 —— HashSet

时间:2025-03-29 08:05:32
public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, 


  1. 构造函数:可以看出数据是存在 HashMap 里的
private transient HashMap<E,Object> map;
public HashSet() {
    map = new HashMap<>();
}


看下 Set 接口需要实现的方法
  1. add 方法:利用 HashMap put 方法的特点,put 成功会返回旧的 value 值,所以 add 一个没有重复的数据,那么返回的旧值必然是 null,所以 add 就 return true 说明插入成功,否则说明插入的值已经存在,插入失败
public boolean add(E e) {
    return (e, PRESENT)==null;
}


  1. remove 方法:利用 HashMap 的 remove 方法,如果删除成功就返回当前被 remove key 所对应的 value,因为存的 value 都是 PRESENT,所以删除成功则返回 true
public boolean remove(Object o) {
    return (o)==PRESENT;
}




二. 总结
HashSet 依赖 HashMap 的已实现的方法来实现的,所以看懂 HashSet 的前提是看懂 HashMap。