HashMap的時間復雜度


HashMap的時間復雜度

HashMap在jdk1.8之后引入了紅黑樹的概念,表示若桶中鏈表元素超過8時,會自動轉化成紅黑樹;

若桶中元素小於等於6時,樹結構還原成鏈表形式。

原因:

紅黑樹的平均查找長度是log(n),長度為8,查找長度為log(8)=3,鏈表的平均查找長度為n/2,當長度為8時,平均查找長度為8/2=4,這才有轉換成樹的必要;鏈表長度如果是小於等於6,6/2=3,雖然速度也很快的,但是轉化為樹結構和生成樹的時間並不會太短。

還有選擇6和8的原因是:

中間有個差值7可以防止鏈表和樹之間頻繁的轉換。假設一下,如果設計成鏈表個數超過8則鏈表轉換成樹結構,鏈表個數小於8則樹結構轉換成鏈表,如果一個HashMap不停的插入、刪除元素,鏈表個數在8左右徘徊,就會頻繁的發生樹轉鏈表、鏈表轉樹,效率會很低。

時間復雜度

不管插入還是查找,由key獲取hash值然后定位到桶的時間復雜度都是O(1),那么真正決定時間復雜度的實際上是桶里面鏈表/紅黑樹的情況

如果桶里面沒有元素,那么直接將元素插入/或者直接返回未查找到,時間復雜度就是O(1),如果里面有元素,那么就沿着鏈表進行遍歷,時間復雜度就是O(n),鏈表越短時間復雜度越低,如果是紅黑樹的話那就是O(logn)

所以平均復雜度很難說,只能說在最優的情況下是O(1)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM