hashMap

  1. HashMap概述

HashMap是基于哈希表的Map接口的非同步實現(xiàn)。此實現(xiàn)提供所有可選的映射操作,并允許使用null值和null鍵。此類不保證映射的順序,特別是它不保證該順序恒久不變。

  1. HashMap的數(shù)據(jù)結構
    HashMap實際上是一個“鏈表散列”的數(shù)據(jù)結構,即數(shù)組和鏈表的結合體。一個是數(shù)組,另外一個是鏈表,所有的數(shù)據(jù)結構都可以用這兩個基本結構來構造的。
數(shù)據(jù)結構
  1. HashMap的存取 (hashCode一樣處理方式)

    HashMap的功能是通過“鍵(key)”能夠快速的找到“值”。下面我們分析下HashMap存數(shù)據(jù)的基本流程:
    1、 當調用put(key,value)時,首先獲取key的hashcode,int hash = key.hashCode();
    2、 再把hash通過一下運算得到一個int h.

HashMap會先用key的hash值來檢查是否發(fā)生了hash碰撞,也就是對應的位置是否為空,為空的話就創(chuàng)建一個Entity<K,V>對象,在 table[index]位置上插入,這樣插入結束;如果有的話,通過鏈表的遍歷方式去逐個遍歷,看看有沒有已經存在的key,有的話用新的value替 換老的value;如果沒有,則在table[index]插入該Entity,把原來在table[index]位置上的Entity賦值給新的 Entity的next,這樣插入結束。

4、加載因子

當 創(chuàng)建 HashMap 時,有一個默認的負載因子(load factor),其默認值為 0.75,這是時間和空間成本上一種折衷:增大負載因子可以減少 Hash 表(就是那個 Entry 數(shù)組)所占用的內存空間,但會增加查詢數(shù)據(jù)的時間開銷,而查詢是最頻繁的的操作(HashMap 的 get() 與 put() 方法都要用到查詢);減小負載因子會提高數(shù)據(jù)查詢的性能,但會增加 Hash 表所占用的內存空間。我們可以在創(chuàng)建 HashMap 時根據(jù)實際需要適當?shù)卣{整 load factor 的值;如果程序比較關心空間開銷、內存比較緊張,可以適當?shù)卦黾迂撦d因子;如果程序比較關心時間開銷,內存比較寬裕則可以適當?shù)臏p少負載因子。通常情況 下,無需改變負載因子的值

加載因子是表示Hsah表中元素的填滿的程度.若:加載因子越大,填滿的元素越多,好處是,空間利用率高了,但:沖突的機會加大了.反之,加載因子越小,填滿的元素越少,好處是:沖突的機會減小了,但:空間浪費多了,沖突的機會越大,則查找的成本越高.反之,查找的成本越小.因而,查找時間就越小.

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

相關閱讀更多精彩內容

  • HashMap 是 Java 面試必考的知識點,面試官從這個小知識點就可以了解我們對 Java 基礎的掌握程度。網...
    野狗子嗷嗷嗷閱讀 6,813評論 9 107
  • 前言 這次我和大家一起學習HashMap,HashMap我們在工作中經常會使用,而且面試中也很頻繁會問到,因為它里...
    liangzzz閱讀 8,123評論 7 102
  • 本文轉自 https://zhuanlan.zhihu.com/p/21673805 美團點評技術團隊· 3 個月...
    抓兔子的貓閱讀 1,154評論 0 1
  • 初入職場有三種職業(yè)發(fā)展模式: 一、選擇一家大公司,工作一兩年,鍍點金之后,迅速跳槽,應該很容易拿到senior的職...
    成長是剛需閱讀 808評論 0 0
  • 公司地鐵站5號口有一片綠化草坪,在草坪右手邊有條路口,那里常常有很多的小吃攤。早晨賣的是煎餃、煎餅、包子和豆?jié){。晚...
    顏先生閱讀 371評論 0 1

友情鏈接更多精彩內容