HASHMAP 总结

以前很少有阅读源码的习惯。最近开始有跳槽的打算,那天鼓起勇气去面了SOHU,然后很自然地被鄙视了。

真是沉睡太久。真心要开始努力了。


话不多说。今天要总结 的一个是那天的面试题之一。HASHMAP的结构分析。


其实一开始看这题心里就有点心虚了。除了那个地球人都知道的KEY-VALUE以外,真心无别知识点可写。

回来后,看了下JDK.加上那天那个面试官解说的,终于算是有了个大概的理解。


实际上HASHMAP是一个ENTRY的数组的结构。而ENTRY又是一个链表结构的东东。这也不难理解,以前调试的时候 ,看HASHMAP的结构有时总会有一个NETRY的NEXT连着一个ENTRY。现在算明白了。原来是这么回事。


还有几个要点。

1。HASHMAP是可以放NULL作为KEY值 的,放NULL的时候 ,就把其HASH值 作为0来算。



2。PUT(KEY,VALUE)这个方法是在放进KEY时,根据KEY的HASH值算得所在数组位,再在这个位置插入(之所以说插入是因为每个位置上都是链表结构)。


3。如果你在构造HASHMAP时不指定好默认数组参数大小,HASHMAP会提供默认的数据大小。还有一个代码空间值 的loadFactor,用于决定HASHMAP的空间排布复杂情况的。前面有介绍到HASHMAP的实际结构实际上就是一个链表数组,而放进来的数据KEY,VALUE,是根据KEY的HASH值取一个算法来记算其所在数组中的位置的。在取得位置时就是顺插入链表中。而因为在HASHMAP中的算法是当所放元素个数大于某个值后,就要加大数组位数,而这个值就是由loadFactor*当前数组位数决定 的。loadFactor越大,链表结构有可能越深。


4。REMOVE方法实际上与PUT对应,由HASH值算得所在数组位置,再从依次遍历链表删除 结构。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值