扫码关注公众号

测试计划之hashmap分析
09-07
202观看
01

当两个对象的 hashCode 相同会发生什么?

因为hashCode相同,不一定就是相等的(equals方法比较),所以两个对象所在数组的下标相同,"碰撞"就此发生。又因为HashMap使用链表存储对象,这个Node会存储到链表中。

来自:测试计划-测试工具
02

HashMap 的 table 的容量如何确定?loadFactor 是什么?该容量如何变化?这种变化会带来什么问题?

①、table数组大小是由capacity这个参数确定的,默认是16,也可以构造时传入,最大限制是1<<30;②、loadFactor是装载因子,主要目的是用来确认table数组是否需要动态扩展,默认值是0.75,比如table数组大小为16,装载因子为0.75时,threshold就是12,当table的实际大小超过12时,table就需要动态扩容;③、扩容时,调用resize()方法,将table长度变为原来的两倍(注意是table长度,而不是threshold)④、如果数据很大的情况下,扩展时将会带来性能的损失,在性能要求很高的地方,这种损失很可能很致命。

来自:测试计划-测试工具
03

HashMap 和 HashTable 有什么区别?

①、HashMap是线程不安全的,HashTable是线程安全的;②、由于线程安全,所以HashTable的效率比不上HashMap;③、HashMap最多只允许一条记录的键为null,允许多条记录的值为null,而HashTable不允许;④、HashMap默认初始化数组的大小为16,HashTable为11,前者扩容时,扩大两倍,后者扩大两倍+1;⑤、HashMap需要重新计算hash值,而HashTable直接使用对象的hashCode

来自:测试计划-测试工具
04

HashMap 的 table 的容量如何确定?loadFactor 是什么?该容量如何变化?这种变化会带来什么问题?

①、table数组大小是由capacity这个参数确定的,默认是16,也可以构造时传入,最大限制是1<<30;②、loadFactor是装载因子,主要目的是用来确认table数组是否需要动态扩展,默认值是0.75,比如table数组大小为16,装载因子为0.75时,threshold就是12,当table的实际大小超过12时,table就需要动态扩容;③、扩容时,调用resize()方法,将table长度变为原来的两倍(注意是table长度,而不是threshold)④、如果数据很大的情况下,扩展时将会带来性能的损失,在性能要求很高的地方,这种损失很可能很致命。

来自:测试计划-测试工具
课程
专栏
常用的软件功能测试工具有哪些?谢谢!!
知乎
测试工具
【校招VIP】HashMap底层实现原理详解
知乎
HashMap
测试技术-测试计划-测试工具
2专栏
1课程
4 试题