跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • HashMap 在 jdk 1.7 中为什么选的头插法,而不是尾插法
未分類
10 1 月 2021

HashMap 在 jdk 1.7 中为什么选的头插法,而不是尾插法

HashMap 在 jdk 1.7 中为什么选的头插法,而不是尾插法

資深大佬 : Leexiaobu 2

在我看来,头插法和尾插法都要遍历一遍链表啊,应该不是效率问题吧.

大佬有話說 (9)

  • 資深大佬 : VincentWang

    有一种说法是:缓存的时间局部性原则 (新插入的数据可能会更早用到)

  • 主 資深大佬 : Leexiaobu

    我刚看了遍源码,得出一个结论,感觉还挺像的
    插入时需要判断是否重复,此时要遍历一遍链表,
    如果采用尾插法,需要将尾节点保存起来,传入后面的 addEntry 的方法中
    addEntry 会判断是否需要扩容,如果扩容的话,待插入节点的下标就需要重新计算,
    这样之前保存的尾节点就不一定正确,需要在重新计算一次尾节点,
    所以说使用头插法效率会高一些

  • 主 資深大佬 : Leexiaobu

    @VincentWang 刚刚不知道如何回复。

  • 資深大佬 : qwerthhusn

    插头插尾都无所谓,因为链表长度达到 8 (好像是 6,忘记了)的时候,就变成红黑树了,
    长度个位数的链表,咋遍历都不会影响性能

  • 資深大佬 : ssynhtn

    因为简单啊,怎么简单怎么来呗

  • 資深大佬 : emSaVya

    头插有概率形成死循环 1.8 以后改成尾插

  • 資深大佬 : cco

    @qwerthhusn 这不是 1.8 后才有的么?

  • 主 資深大佬 : Leexiaobu

    @qwerthhusn,在 1.8 之后确实不用考虑这个问题了,但是我当时奇怪的是 1.7 为什么用的头插法。
    @emSaVya 对,就是因为头插法会形成环形链表,所以我才好奇为什么不用尾插法,当时我以为效率一样,后面发现其实是不一样的。

  • 資深大佬 : ffhigh

    如果 1.7 只改尾插, 不改扩容机制。 也不会形成环么?

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具