主题
《面渣逆袭》Java集合框架 篇 · 第 4/4 章。原版 PDF(下载 / 打印)
Set 面试没啥好问的,拿HashSet 来凑个数。
30.讲讲HashSet的底层实现?
HashSet 底层就是基于 HashMap 实现的。( HashSet 的源码非常非常少,因为除了 clone() 、
writeObject() 、 readObject() 是 HashSet自己不得不实现之外,其他方法都是直接调用 HashMap中的方法。
HashSet 的a dd 方法,直接调用HashMap 的p ut 方法,将添加的元素作为k ey ,n ew 一个Object 作为
value ,直接调用HashMap 的p ut 方法,它会根据返回值是否为空来判断是否插入元素成功。
java
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
而在HashMap 的putVal 方法中,进行了一系列判断,最后的结果是,只有在k ey 在table 数组中不存在的时候,才会返回插入的值。
if (e != null) { // existing mapping for key
V oldValue = e.value;
if (!onlyIfAbsent || oldValue == null)
e.value = value;
afterNodeAccess(e);
return oldValue;
}没有什么使我停留— — 除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟。
系列内容:
面渣逆袭 JavaSE 篇!
面渣逆袭 Java 集合框架篇!
面渣逆袭 Java 并发编程篇!
面渣逆袭 JVM 篇!
面渣逆袭 Spring 篇!
面渣逆袭 Redis 篇!
面渣逆袭 MyBatis 篇!
面渣逆袭 MySQL 篇!
面渣逆袭操作系统篇!
面渣逆袭计算机网络篇!
图文详解 30 道Java 集合框架面试高频题,这次吊打面试官,我觉得稳了(手动 dog )。整理:
沉默王二,戳转载链接,作者:三分恶,戳原文链接。