對於HashMap為什麼要使用陣列加鍊表的個人思考

2022-09-22 19:24:08 字數 569 閱讀 7831

問題的源頭:hashmap資料結構是?

陣列加鍊表,1.8增加了紅黑樹,那麼為什麼?「陣列的特點查詢快,增刪慢,鍊錶查詢慢,增刪快,陣列加鍊表是折中方案」,其實這種描述並不準確,因為在使用hashmap的時候陣列插入並不慢,而鍊錶增刪快的特點也沒有發揮出來,因為每次put都需要遍歷一遍判斷key值是否相等,那麼使用鍊錶的原因其實是不得已而為之。那麼設計者最初可能只想使用陣列,但是單單使用陣列的時候一旦發生hash衝突,那麼就需要進行陣列的擴容,這樣經常擴容的開銷是很大的。所以使用了鍊錶來緩解雜湊衝突對擴容的需求,減少擴容次數

理想情況下可能會使用多層陣列結構,每一層使用雜湊演算法定位到下一層……???什麼雜湊演算法……???

至於為什麼使用紅黑樹?當鍊表很長的時候查詢效率就很低了,改為紅黑樹提高查詢效率o(logn),但是結點比煉表要多了一倍,屬於空間換時間。

為什麼不使用其他樹?相對**l樹,紅黑樹的插入更快……???

為什麼要使用blog

有哥們問我,你為什麼使用blog?我總結了一下,覺得有如下幾個原因。1對自己的督促 有了blog,就會經常記得寫點東西 就會經常翻翻網上的新文章,了解一下新技術,不至於迷失在忙碌的生活中 如果把自己的所感所想所學寫出了,自己對自己也會有個概念,不至於迷迷糊糊 還有,畢竟是掛在網上的文字,心中難免擔心...

為什麼要使用XML

xml 代表擴充套件標記語言 extensible markup language 是由 world wide web consortium w 3c 的 xml工作組定義的。這個工作組是這樣描述該語言的 擴充套件標記語言 xml 是 sgml 的子集,其目標是允許普通的 sgml 在web 上以目...

為什麼要使用Nginx?

有人說這些基準測試是不準確的,因為在這樣那樣的環境下,做的比較不一致。我傾向同意基準測試只是告訴了我們其中一部分情況,你能做的是消除偏見 有人見過所有人都同意乙個基準測試是公平的嗎?我是沒見過。我們投資的一些公司把web平台切換到nginx後,可以顯著的解決擴充套件問題。nginx明顯有效的實現了今...