2017-03-13-Java基礎(chǔ)-Map介紹

一,HashMap特點

  • HashMap的內(nèi)部實現(xiàn)是數(shù)組+鏈表

  • 每個元素在數(shù)組中的位置都是根據(jù)key的hash值來確定的

  • 由于key不同的時候hash值可能也相同,所以數(shù)組的每個個位置保存的是一個Entry對象,內(nèi)部也是key,value的形式保存

  • 例如我們添加元素的時候,當(dāng)前位置有相同的hash的Entry對象,此時循環(huán)這個Entry對象如果有相同的key,則替換,沒有則添加都表頭,并且指向之前位于表頭的Entry對象

  • 讀取元素的時候,先通過key的hash,獲取元素的數(shù)組中位置,然后通過比較Entry對象的key值,如果有,則返回對應(yīng)的value

    ps:當(dāng)某個位置的鏈表只有一個的時候,此時的hashMap性能的最好的

  • HashMap的線程非安全的

  • hashMap的key值可以為null值

  • HashMap的默認(rèn)加載因子的0.75,其長度一般都是2的n次冪,默認(rèn)長度的16,每次擴容都是*2倍

  • 加載因子(HashMap最多能放size*加載因子個元素),提高查詢效率。加載因子過高雖然可以降低空間的開銷,但是卻提高了查詢某個元素的時間

  • JDK 8對HashMap查詢做了優(yōu)化,如果某個位置的鏈表長度大于8的時候,查詢將變成紅黑樹

二,HashTable特點

  • HashTable是線程安全,因此在速度上Hashmap比HashTable快,HashTable每次都需要獲得同步鎖和放棄同步鎖
  • Java5以上,提供ConcurrentHashMap線程安全,比HashTable有更好的效率,比HashTable的擴展性更好。之所以ConcurrentHashMap更好是因為使用了局部鎖,而HashTable是類鎖
  • hashTable key值不能為null,從效率上來說,HashMap比HashTable更好

三,ConcurrentHashMap的實現(xiàn)原理

四,TreeMap

五,HashSet

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 實際上,HashSet 和 HashMap 之間有很多相似之處,對于 HashSet 而言,系統(tǒng)采用 Hash 算...
    曹振華閱讀 2,561評論 1 37
  • HashMap 是 Java 面試必考的知識點,面試官從這個小知識點就可以了解我們對 Java 基礎(chǔ)的掌握程度。網(wǎng)...
    野狗子嗷嗷嗷閱讀 6,810評論 9 107
  • Java集合:HashMap源碼剖析 一、HashMap概述 二、HashMap的數(shù)據(jù)結(jié)構(gòu) 三、HashMap源碼...
    記住時光閱讀 779評論 2 1
  • 距離恩恩離開我已有六天。在這六天里,我一個電話也沒有打給他,一個視頻也沒有發(fā)給他。在這之前,我三番四次的和...
    鸚鵡學(xué)舌閱讀 352評論 0 0
  • D30 2016/11/16 1讀書筆記:《自控力》— 不要用饑餓來減輕,同樣不要過于克制來控制自己。 2 工作...
    俗人特福閱讀 295評論 0 0

友情鏈接更多精彩內(nèi)容