HashMap,SparseArray,Arraymap分析

1 HashMap的原理可以看美團點評的文章:

HashMap 初始化一個長度為16的數(shù)組,數(shù)組的每個元素又是一個鏈表結構;

HashMap在put數(shù)據(jù)的時候,會根據(jù)key的hashCode值進行hash算法, 在進行高位運算得到這個值在data[] 數(shù)組中的index,然后將value放入數(shù)組的位置,如果發(fā)生hash碰撞使用鏈地址法-也就是多個值成為一個鏈表形式。

當然還有其他方法:開放地址法 ,再哈希法,鏈地址法,建立公共溢出區(qū)。

而且HashMap還有一個 負載因此0.75,存儲數(shù)據(jù)達到容量的75%時會擴容一倍大?。?/p>

這樣可知--HashMap在內存使用率上并不是很高;在數(shù)據(jù)量較大的情況下,data數(shù)組的數(shù)據(jù)是不連續(xù)的,浪費了許多內存;

2 ArrayMap在設計上更多的考慮了內存優(yōu)化;

他有兩個數(shù)組;一個數(shù)組用來存放key的hash值,并且是排好序的;另一個數(shù)組用來存放keyvalue值;

這樣一個數(shù)據(jù)就占用一份內存;內存節(jié)??;

get/put時會根據(jù)key的hashCode進行二分查找到index,在另一個數(shù)組中獲取值;

3 SpareArray和Arraymap是類似的,但是它只是在key為int的時候能夠使用,也就是去掉了裝箱的操作,性能稍有提升。


一般來說數(shù)據(jù)量小于1000的時候可以使用ArrayMap來替代hashMap,節(jié)約內存;

但數(shù)據(jù)量較大的時候查詢速度沒有hashmap塊;查詢和插入的速度比hashmap慢。

參考 http://www.itdecent.cn/p/7b9a1b386265

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

相關閱讀更多精彩內容

  • HashMap 是 Java 面試必考的知識點,面試官從這個小知識點就可以了解我們對 Java 基礎的掌握程度。網(wǎng)...
    野狗子嗷嗷嗷閱讀 6,808評論 9 107
  • 前言 這次我和大家一起學習HashMap,HashMap我們在工作中經(jīng)常會使用,而且面試中也很頻繁會問到,因為它里...
    liangzzz閱讀 8,116評論 7 102
  • 實際上,HashSet 和 HashMap 之間有很多相似之處,對于 HashSet 而言,系統(tǒng)采用 Hash 算...
    曹振華閱讀 2,561評論 1 37
  • 提到mysql壓縮相關的內容,我們能想到的可能是如下幾種和壓縮相關的場景: 1、客戶端和服務器之間傳輸?shù)臄?shù)據(jù)量太大...
    飛鴻無痕閱讀 2,908評論 0 6
  • 安裝最新 npm 版本npm i npm -g 一. 安裝 webpack: (全局安裝) // 查看版本:web...
    _Wake閱讀 342評論 0 2

友情鏈接更多精彩內容