一、HashMap簡介
HashMap是Java中的一種數據結構,是一種散列表實現。它存儲的元素是以key-value的形式進行存儲,其中key必須唯一,而value可以重複。HashMap的底層實現是通過數組和鏈表/紅黑樹實現的。
在HashMap中,通過hashCode()和equals()方法來確定鍵值對的映射關係。其中,hashCode()方法用於計算key對應的哈希值,而equals()方法則用於比較key是否相同。
二、HashMap應用場景
1、緩存數據:HashMap中的數據可以存儲在內存中,並且可以快速地進行讀取,非常適合用於緩存中間數據。
2、快速數據檢索:HashMap中的查詢速度非常快,對於需要快速查找數據的場景來說非常適合。
3、用於統計數據:某些場景中需要對數據進行統計,HashMap可以通過key唯一來實現。
三、HashMap常用操作
1、添加元素put()
使用put()方法向HashMap中添加元素,如果key不存在則直接添加,如果key存在,則更新value的值。示例代碼如下:
HashMap<String, Integer> hashMap = new HashMap<>(); hashMap.put("apple", 1); hashMap.put("banana", 2);
2、獲取元素get()
使用get()方法從HashMap中獲取元素,需要傳入key值,如果key值不存在則返回null。示例代碼如下:
Integer value = hashMap.get("apple");
3、遍曆元素
3.1 遍歷key值集合
使用keySet()獲取HashMap中的所有key值,對於每一個key值通過get()方法獲取對應的value值完成遍歷。示例代碼如下:
for (String key : hashMap.keySet()) { Integer value = hashMap.get(key); System.out.println(key + ":" + value); }
3.2 遍歷value值集合
使用values()獲取HashMap中的所有value值,對於每一個value值遍歷即可。示例代碼如下:
for (Integer value : hashMap.values()) { System.out.println(value); }
3.3 遍歷鍵值對集合
使用entrySet()方法獲取HashMap中的所有鍵值對,對於每一個鍵值對通過getKey()和getValue()方法獲取對應的key和value值完成遍歷。示例代碼如下:
for (Map.Entry<String, Integer> entry : hashMap.entrySet()) { String key = entry.getKey(); Integer value = entry.getValue(); System.out.println(key + ":" + value); }
4、刪除元素remove()
使用remove()方法可以刪除HashMap中指定的元素,需要傳入key值,刪除成功返回對應的value值,失敗返回null。示例代碼如下:
Integer value = hashMap.remove("apple");
五、HashMap的性能分析
HashMap的性能在理論上可以達到$O(1)$的常數級別,因為它使用了哈希表實現,但是如果出現哈希碰撞的情況下,性能會下降。
另外,在JDK1.8之前,HashMap使用的是鏈表實現,而在JDK1.8之後,默認情況下鏈表長度超過8時會轉換為紅黑樹,提升性能。
六、HashMap的注意點
1、HashMap是非線程安全的,如果需要在多線程環境下使用,需要採用線程安全的ConcurrentHashMap類。
2、HashMap的初始值大小會影響性能,在構造函數中可以設置HashMap的初始值大小,如果已知數據量大小,可以設置適當值以避免頻繁進行rehash操作。
七、HashMap完整代碼
import java.util.HashMap; import java.util.Map; public class HashMapDemo { public static void main(String[] args) { // 創建一個HashMap實例 Map<String, Integer> hashMap = new HashMap<>(); // 添加元素 hashMap.put("apple", 1); hashMap.put("banana", 2); // 獲取元素 Integer value = hashMap.get("apple"); // 遍歷key值集合 for (String key : hashMap.keySet()) { Integer val = hashMap.get(key); System.out.println(key + ":" + val); } // 遍歷value值集合 for (Integer val : hashMap.values()) { System.out.println(val); } // 遍歷鍵值對集合 for (Map.Entry<String, Integer> entry : hashMap.entrySet()) { String key = entry.getKey(); Integer val = entry.getValue(); System.out.println(key + ":" + val); } // 刪除元素 Integer val = hashMap.remove("apple"); } }
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/242677.html