| 企服解答
Hashmap 中文名哈希映射,是基于哈希表的 Map 接口的實現,HashMap 是一個用于存儲 Key-Value 鍵值對的集合。此實現提供了所有可選的映射操作,并允許空值和空鍵。HashMap 主要通過 key 存儲 value 值,并且提供了添加,獲取和操作存儲 value 的方法。HashMap 的實現基于 HashTable。
hashmap是什么
HashMap 的特點包括:
1、底層實現是 鏈表數組,JDK 8 后又加了 紅黑樹
2、實現了 Map 全部的方法
3、key 用 Set 存放,所以想做到 key 不允許重復,key 對應的類(一般是 String)需要重寫 hashCode 和 equals 方法
4、允許空鍵和空值(但空鍵只有一個,且放在第一位,知道就行)
5、元素是無序的,而且順序會不定時改變(每次擴容后,都會重新哈希,也就是 key 通過哈希函數計算后會得出與之前不同的哈希值,這就導致哈希表里的元素是沒有順序,會隨時變化的,這是因為哈希函數與桶數組容量有關,每次結點到了臨界值后,就會自動擴容,擴容后桶數組容量都會乘二,而 key 不變,那么哈希值一定會變)
6、插入、獲取的時間復雜度基本是 O(1)(前提是有適當的哈希函數,讓元素分布在均勻的位置)
7、遍歷整個 Map 需要的時間與數組的長度成正比(因此初始化時 HashMap 的容量不宜太大)
8、兩個關鍵因子:初始容量、加載因子
| 拓展閱讀
HashMap基于hashing原理,我們通過put()和get()方法儲存和獲取對象。當我們將鍵值對傳遞給put()方法時,它調用鍵對象的hashCode()方法來計算hashcode,讓后找到bucket位置來儲存值對象。當獲取對象時,通過鍵對象的equals()方法找到正確的鍵值對,然后返回值對象。HashMap使用鏈表來解決碰撞問題,當發生碰撞了,對象將會儲存在鏈表的下一個節點中。 HashMap在每個鏈表節點中儲存鍵值對對象。
[免責聲明]
文章標題: hashmap是什么
文章內容為網站編輯整理發布,僅供學習與參考,不代表本網站贊同其觀點和對其真實性負責。如涉及作品內容、版權和其它問題,請及時溝通。發送郵件至36dianping@36kr.com,我們會在3個工作日內處理。