眾所周知,Hashmap是基于哈希表的 Map 接口的實(shí)現(xiàn),是一個用于存儲 Key-Value 鍵值對的集合。此實(shí)現(xiàn)提供了所有可選的映射操作,并允許空值和空鍵。HashMap 主要通過 key 存儲 value 值,并且提供了添加,獲取和操作存儲 value 的方法。其特點(diǎn)如下:
1、底層實(shí)現(xiàn)是 鏈表數(shù)組,JDK 8 后又加了 紅黑樹
2、實(shí)現(xiàn)了 Map 全部的方法
3、key 用 Set 存放,所以想做到 key 不允許重復(fù),key 對應(yīng)的類(一般是 String)需要重寫 hashCode 和 equals 方法
4、允許空鍵和空值(但空鍵只有一個,且放在第一位,知道就行)
5、元素是無序的,而且順序會不定時改變(每次擴(kuò)容后,都會重新哈希,也就是 key 通過哈希函數(shù)計(jì)算后會得出與之前不同的哈希值,這就導(dǎo)致哈希表里的元素是沒有順序,會隨時變化的,這是因?yàn)楣:瘮?shù)與桶數(shù)組容量有關(guān),每次結(jié)點(diǎn)到了臨界值后,就會自動擴(kuò)容,擴(kuò)容后桶數(shù)組容量都會乘二,而 key 不變,那么哈希值一定會變)
6、插入、獲取的時間復(fù)雜度基本是 O(1)(前提是有適當(dāng)?shù)墓:瘮?shù),讓元素分布在均勻的位置)
7、遍歷整個 Map 需要的時間與數(shù)組的長度成正比(因此初始化時 HashMap 的容量不宜太大)
8、兩個關(guān)鍵因子:初始容量、加載因子
以上就是什么是hashmap,有啥特點(diǎn)?的內(nèi)容。