java: HashMap面试题(JDK 8)

您所在的位置:网站首页 jdk的作用和分类 java: HashMap面试题(JDK 8)

java: HashMap面试题(JDK 8)

2023-03-27 13:53| 来源: 网络整理| 查看: 265

java: HashMap面试题(JDK 8) 原创

wx62e0d796b5814 2023-03-25 01:04:55 ©著作权

文章标签 java 数据结构 链表 结点 数组 文章分类 Html/CSS 前端开发

©著作权归作者所有:来自51CTO博客作者wx62e0d796b5814的原创作品,请联系作者获取转载授权,否则将追究法律责任

一、HashMap默认装载因子是多少?

0.75

二、调用构造方法的时候会创建Node数组吗?

不会

三、元素的哈希值是怎么算出来的?

static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); }

通过元素的哈希码进行一定的位运算得到的 四、HashMap Node中的数据什么情况使用链表存储?什么时候用红黑树存储?

当某个Node中的链表长度大于8且数组长度大于64时才会转成红黑树存储, 否则使用链表存储

五、当发生哈希冲突时如何处理?

如果哈希code相同,则新结点替换旧结点。 否则,如果Node是链表时,则把新结点插在链表的尾部

六、什么时候扩容?

元素的数量大于数组大小(默认16)*装载因子(默认0.75)会扩容,扩容后的容量为原来的2倍。

七、最大容量是多少?

MAXIMUM_CAPACITY = 1 0) // initial capacity was placed in threshold newCap = oldThr; 这个语句,把新的容量设置为32。 当下次再进行扩容时,旧的容量已经大于0,将通过如下逻辑将容量和threshold翻倍 if (oldCap > 0) { if (oldCap >= MAXIMUM_CAPACITY) { threshold = Integer.MAX_VALUE; return oldTab; } else if ((newCap = oldCap = DEFAULT_INITIAL_CAPACITY) newThr = oldThr 收藏 评论 分享 举报

上一篇:jvm复习: 扩展类加载器目录里的文件必须是jar文件而不是.class文件

下一篇:Spring 6.0官方文档示例(14) Collection类型数据的注入



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3