一、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-tw/n/242677.html
微信掃一掃
支付寶掃一掃