Java HashMap:高效數據存儲與检索的關鍵
介紹
你好,有抱負的Java程序員!今天,我們將進入Java HashMap的精彩世界。別讓這個花哨的名稱嚇到你。將HashMap視為您數據的超智能文件櫃。它就像擁有一個個人助手,能立即找到你需要任何信息!
當我第一次學習HashMaps時,我想像它們是一個神奇的圖書館,書(我們的數據)能在我們要求的時刻飛出書架進入我們的手中。這就是HashMaps所做的,但使用的是計算機數據而不是書籍。很酷對吧?
讓我們深入探究,揭開這個強大的Java類的秘密!
類聲明
在Java中,HashMap類聲明如下:
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
哇!這真是說不完,不是嗎?如果現在它看起來像字母湯也不要擔心。讓我們來解析一下:
-
public class HashMap<K,V>
:這告訴我們HashMap是一個公共類(任何人都可以使用),並且它使用兩個型別參數,K
用於鍵型別和V
用於值型別。 -
extends AbstractMap<K,V>
:HashMap是基於另一個名為AbstractMap的類構建的。 -
implements Map<K,V>, Cloneable, Serializable
:這些是HashMap實現的接口,賦予它額外的超能力!
參數
還記得我們神奇的圖書館類比嗎?好吧,在這個圖書館中,每本書(值)都有一個唯一的呼叫號碼(鍵)。在HashMap術語中:
-
K
:此映射維護的鍵的型別 -
V
:映射值的型別
例如,如果您想存儲人們的年齡,您可以使用String
作為名稱(鍵)和Integer
作為年齡(值)。
類構造器
HashMap有四個不同的構造器。將這些視為構建我們神奇圖書館的不同方式:
-
HashMap()
:創建一個空的HashMap,具有默認容量和負載因子。 -
HashMap(int initialCapacity)
:創建一個空的HashMap,具有指定的初始容量和默認負載因子。 -
HashMap(int initialCapacity, float loadFactor)
:創建一個空的HashMap,具有指定的初始容量和負載因子。 -
HashMap(Map<? extends K, ? extends V> m)
:創建一個新的HashMap,其映射與指定的Map相同。
現在不用太過擔心容量和負載因子。只需知道它們如何影響我們HashMap在幕後的操作效率。
類方法
現在,讓我們看看我們的HashMap能做的一些酷事。我會向您展示一些最常用的方法:
方法 | 描述 |
---|---|
put(K key, V value) |
將鍵值對添加到映射中 |
get(Object key) |
检索與指定鍵相關聯的值 |
remove(Object key) |
刪除指定鍵的映射 |
clear() |
刪除映射中的所有映射 |
size() |
返回映射中的鍵值對數量 |
isEmpty() |
如果映射不包含映射,則返回true |
containsKey(Object key) |
如果映射包含指定的鍵,則返回true |
containsValue(Object value) |
如果映射包含指定的值,則返回true |
繼承的方法
HashMap還從其父類和接口繼承了方法。這就像我們的神奇圖書館從更老、更聰明的圖書館那裡繼承了一些技巧!以下是一些示例:
- 從
java.util.AbstractMap
:equals()
,hashCode()
,toString()
- 從
java.util.Map
:putAll()
,entrySet()
,keySet()
,values()
示例
讓我們用一個簡單的例子來實踐我們新學到的知識。我們將創建一個HashMap來存儲一些著名科學家的年齡:
import java.util.HashMap;
public class ScientistAges {
public static void main(String[] args) {
// 創建一個新的HashMap
HashMap<String, Integer> scientistAges = new HashMap<>();
// 添加一些鍵值對
scientistAges.put("Albert Einstein", 76);
scientistAges.put("Isaac Newton", 84);
scientistAges.put("Marie Curie", 66);
// 检索並打印一個值
System.out.println("Albert Einstein's age: " + scientistAges.get("Albert Einstein"));
// 檢查一個鍵是否存在
if (scientistAges.containsKey("Stephen Hawking")) {
System.out.println("We have Stephen Hawking's age.");
} else {
System.out.println("We don't have Stephen Hawking's age.");
}
// 打印HashMap的大小
System.out.println("Number of scientists: " + scientistAges.size());
// 刪除一個鍵值對
scientistAges.remove("Isaac Newton");
// 打印所有鍵值對
for (String name : scientistAges.keySet()) {
System.out.println(name + " lived to be " + scientistAges.get(name) + " years old.");
}
}
}
輸出
當我們運行此代碼時,我們將看到以下內容:
Albert Einstein's age: 76
We don't have Stephen Hawking's age.
Number of scientists: 3
Albert Einstein lived to be 76 years old.
Marie Curie lived to be 66 years old.
讓我們解析一下發生了什麼:
- 我們創建了一個新的HashMap,名為
scientistAges
。 - 我們添加了三個鍵值對:科學家的名字和他們的年齡。
- 我們使用
get()
方法檢索了愛因斯坦的年齡。 - 我們使用
containsKey()
檢查是否有霍金的年齡。我們沒有,所以它打印了“沒有”的消息。 - 我們使用
size()
打印映射中的科學家數量。 - 我們使用
remove()
刪除了牛頓。 - 最後,我們使用for-each循環迭代所有剩余的鍵值對並打印它們。
就是這樣!您已經踏出了Java HashMap世界的第一步。記住,實踐使完美。嘗試創建您自己的具有不同數據類型的HashMap。也許創建一個您最喜愛的書籍及其作者的映射,或者您朋友的電話號碼。
HashMap在現實世界的編程中非常有用。它們就像數據結構的瑞士軍刀——多功能、高效且隨時方便使用。繼續探索,繼續編程,在您知道之前,您將成為HashMap的大師!
Credits: Image by storyset