主题
《面渣逆袭》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;
}没有什么使我停留— — 除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟。