Skip to content

《面渣逆袭》Java集合框架 篇 · 第 4/4 章。原版 PDF(下载 / 打印)

Set 面试没啥好问的,拿HashSet 来凑个数。

30.讲讲HashSet的底层实现? ​

HashSet 底层就是基于 HashMap 实现的。(HashSet 的源码非常非常少,因为除了 clone()、

writeObject()、 readObject() 是 HashSet 自己不得不实现之外,其他方法都是直接调用 HashMap中的方法。

HashSet 的add 方法,直接调用HashMap 的put 方法,将添加的元素作为key,new 一个Object 作为

value,直接调用HashMap 的put 方法,它会根据返回值是否为空来判断是否插入元素成功。

java
public boolean add(E e) {
    return map.put(e, PRESENT)==null;
}

配图

而在HashMap 的putVal 方法中,进行了一系列判断,最后的结果是,只有在key 在table 数组中不存在的时候,才会返回插入的值。

if (e != null) { // existing mapping for key
    V oldValue = e.value;
    if (!onlyIfAbsent || oldValue == null)
        e.value = value;
    afterNodeAccess(e);
    return oldValue;
}

没有什么使我停留— — 除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟。

本文整理自三分恶《面渣逆袭》系列的公开内容,仅供个人学习使用

本站仅供个人学习使用,请勿外传