(轉)為什麽HashMap中鏈表長度超過8會轉換成紅黑樹
原博地址:https://blog.csdn.net/xingfei_work/article/details/79637878
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左右徘徊,就會頻繁的發生樹轉鏈表、鏈表轉樹,效率會很低。
(轉)為什麽HashMap中鏈表長度超過8會轉換成紅黑樹
相關推薦
(轉)為什麽HashMap中鏈表長度超過8會轉換成紅黑樹
假設 n) net hashmap 頻繁 發生 等於 pan tails 原博地址:https://blog.csdn.net/xingfei_work/article/details/79637878 HashMap在jdk1.8之後引入了紅黑樹的概念,表示若桶中鏈表
為什麼HashMap中連結串列長度超過8會轉換成紅黑樹
開發十年,就只剩下這套架構體系了! >>>
為什麽開發中逐漸拋棄jsp(轉)
用戶體驗 大量 gmv 但是 jboss bug 是個 jsp 行業 以前的項目大多數都是java程序猿又當爹又當媽,又搞前端(ajax/jquery/js/html/css等等),又搞後端(java/mysql/Oracle等等)。 隨著時代的發展,漸漸的許多大中小公司開
為什麽jdbc中的resultset只能取一次去第二次就報錯了
port 範圍 popu epo test span locked inf png 引用 6 樓 的回復: 好吧各位,應該寫getInt(1)但是我要問的是為什麽第二次用會出錯 啊,好古老的一個問題。。。第二次出錯的原因,是因為你創建Statement的時候,
為什麽C++中聲明和定義要分開寫
使用 還得 開始 階段 怎麽辦 clu 即使 tip 文件中 現在開始寫項目了,你會發現我們一般都要寫一個cpp,對應的還得有一個h文件,那麽為什麽在C++中我們要這麽做? .h就是聲明,.cpp就是實現,而所謂分離式實現就是指“聲明”和“定義”分別保存在不同的文件中,聲明
為什麽 c++中函數模板和類模板的 聲明與定義需要放到一起?
color code 我們 ack 二進制 通過 如果 之前 類型 將模板的聲明與定義寫在一起實在很不優雅。嘗試用“傳統”方法,及在.h文件裏聲明,在.cpp文件裏定義, 然後在main函數裏包含.h頭文件,這樣會報鏈接錯誤。why!!!!!!!!!!!!! 這是因為函數模
為什麽Java中1000==1000為false而100==100為true?
png 需要 ice 價值 java技術 poi 實例 via 占用 為什麽Java中1000==1000為false而100==100為true? 這是一個挺有意思的討論話題。 如果你運行下面的代碼: 基本知識:我們知道,如果兩個引用指向同一個
[轉]為什麽股票投資是世界上最難成功的行業
試用 之間 靠譜 智商 產品 不想 辦理 打羽毛球 基本 我在二級市場摸滾打爬的時間已經十多年,接觸過的投資者起碼超過1000個,但真正成功實現財務自由的不足10人,即成功率不到1%。這裏把那些證券服務行業的人剔除,例如投行精英、券商老總。他們並不是靠炒股賺錢,而是靠提
計算機編碼--為什麽整數中負數的除法和右移不是一回事
什麽 lock 其中 img csdn leg tail 計算 的區別 緣起 最近在看卡耐基梅隆大學的【深入理解計算機系統實驗】之datalab時,遇到一個題目: 1 /* 2 * divpwr2 - Compute x/(2^n), for 0 <=
eclipse中的出現在打包一次後,後面新建的項目都出錯了,出現support_v7下面出現紅線及解決方法及為什麽eclipse中項目繼承ActionBarActivity解決方法一樣
style 寫博客 引用 image back 你在 發現 想法 cti 第一次寫博客,有什麽問題或者想法的希望各位可以進行評論交流,望大家多多包涵! 遇到的問題是在新建的項目都出錯了,出現support_v7下面出現紅線及解決方法及為什麽eclipse中項目繼承Acti
為什麽js中0.1+0.2不等於0.3,怎樣處理使之相等?(轉載)
number 就會 理解 als 轉載 解決 面試 精度 超過 為什麽js中0.1+0.2不等於0.3,怎樣處理使之相等? console.log(0.1+0.2===0.3)// true or false?? 在正常的數學邏輯思維中,0.1+0.2=0.3這個邏輯是正確
[轉]為什麽復制構造函數的參數需要加const和引用
構造 tun bsp sina clu tps ons https csdn [轉]為什麽復制構造函數的參數需要加const和引用 一.引言 1.0在解答這個問題之前,我們先跑個小程序,看
為什麽M5311即將成為表計行業的爆款NB-IoT模組
ota 功能 項目 即將 行動 nb-iot技術 iic 1.2 基於 2017.9 中國電信集采50萬片NB-IoT模組2018.8 中國聯通集采300萬片NB-IoT模組2018.11 中國移動集采500萬片NB-IoT模組2019.3 中國電信江蘇公司集采200萬片N
為什麽現在的智能手機,都被設計成不可更換電池?
來講 tex 山寨 維修 客服 https 現象 關註 手機品牌 為什麽現在的智能手機,都被設計成不可更換電池? 近些年來,智能手機興起,成了人們必不可少的生活工具。不過為何近年所推出的手機,已經不能自行更換電池,究竟是什麽原因呢? 很多網友都說手機換電池很方便,例如可
Java 集合深入理解(17):HashMap 在 JDK 1.8 後新增的紅黑樹結構
上篇文章我們介紹了 HashMap 的主要特點和關鍵方法原始碼解讀,這篇文章我們介紹 HashMap 在 JDK1.8 新增樹形化相關的內容。 讀完本文你將瞭解到: 傳統 HashMap 的缺點 JDK 1.8 以前 HashMap 的實
HashMap 在 JDK 1.8 後新增的紅黑樹結構
讀完本文你將瞭解到: 傳統 HashMap 的缺點 JDK 1.8 以前 HashMap 的實現是 陣列+連結串列,即使雜湊函式取得再好,也很難達到元素百分百均勻分佈。 當 HashMap 中有大量的元素都存放到同一個桶中時,這個桶下有一條長長的連結串列,這個
為什麽用快慢指針找鏈表的環,快指針和慢指針一定會相遇
為什麽 鏈接 來源 獲得 快慢指針 聯系 著作權 什麽 相對 https://www.zhihu.com/question/23208893 首先相遇不是操場跑圈,快的能追上慢的,這還用問嗎,肯定能追上。而樓主問的是一個人是跳1個格子,另一個跳2個格子,會不會每次要
SQL Server 2005中的分區表(一):什麽是分區表?為什麽要用分區表?如何創建分區表?
ima 查詢條件 出錯 數據的操作 之間 方便 如何 oar 意思 如果你的數據庫中某一個表中的數據滿足以下幾個條件,那麽你就要考慮創建分區表了。 1、數據庫中某個表中的數據很多。很多是什麽概念?一萬條?兩萬條?還是十萬條、一百萬條?這個,我覺得是仁者見仁、智者
為什麽區塊鏈中最火的是遊戲與×××?
屬性。 amp 簡單 nag 發展 根據 51cto 良性 開發商 在全球鏈圈和幣圈面臨階段性調整時,區塊鏈遊戲和×××卻逆流而上,蓬勃發展。 根據國外Dapprader數據,現有的717個Dapp中,有超過50%是屬於遊戲類應用。在105個×××類Dapp中,大多也帶
inux中硬鏈接為什麽不能跨分區
一個 表關聯 讀取 訪問 為什麽不能 http 之前 tps 轉載 當打開一個文件的時候會先找該文件的inode號,再根據inode號找到inode信息,.再根據inode信息找到該文件數據所在的block(硬盤中一般8個扇區組成一個block,一個扇區512Byte,扇區