美文网首页
HashMap 1.7 与 1.8 的 区别,说明 1.8 做了

HashMap 1.7 与 1.8 的 区别,说明 1.8 做了

作者: Jeffery大侠 | 来源:发表于2018-12-25 09:05 被阅读0次

    参考文献:https://blog.csdn.net/jek123456/article/details/73869203
    https://blog.csdn.net/liyantianmin/article/details/79401854

    JDK1.7中

    使用一个Entry数组来存储数据,但是这个Entry是链表结构,如果插入的key的hashcode相同(hash collision),那么这些key会被定位到Entry数组的同一个格子里,这些key会形成一个链表。

    在hashcode特别差的情况下,比方说所有key的hashcode都相同,这个链表可能会很长,那么put/get操作都可能需要遍历这个链表

    也就是说时间复杂度退化到了O(n)的级别

    JDK1.8中

    使用一个Node数组来存储数据,但这个Node可能是链表结构,也可能是红黑树结构

    如果插入的key的hashcode相同,那么这些key也会被定位到Node数组的同一个格子里。

    如果同一个格子里的key不超过8个,使用链表结构存储。

    如果超过了8个,那么会调用treeifyBin函数,将链表转换为红黑树。

    那么即使hashcode完全相同,由于红黑树的特定,查找某个特定元素,也只需要O(log n)的开销

    也就是说put/get的操作的时间复杂度只有O(log n)

    相关文章

      网友评论

          本文标题:HashMap 1.7 与 1.8 的 区别,说明 1.8 做了

          本文链接:https://www.haomeiwen.com/subject/ehsxlqtx.html