Java HashMap:高效數據存儲與检索的關鍵

介紹

你好,有抱負的Java程序員!今天,我們將進入Java HashMap的精彩世界。別讓這個花哨的名稱嚇到你。將HashMap視為您數據的超智能文件櫃。它就像擁有一個個人助手,能立即找到你需要任何信息!

Java - 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有四個不同的構造器。將這些視為構建我們神奇圖書館的不同方式:

  1. HashMap():創建一個空的HashMap,具有默認容量和負載因子。
  2. HashMap(int initialCapacity):創建一個空的HashMap,具有指定的初始容量和默認負載因子。
  3. HashMap(int initialCapacity, float loadFactor):創建一個空的HashMap,具有指定的初始容量和負載因子。
  4. 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.AbstractMapequals()hashCode()toString()
  • java.util.MapputAll()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.

讓我們解析一下發生了什麼:

  1. 我們創建了一個新的HashMap,名為scientistAges
  2. 我們添加了三個鍵值對:科學家的名字和他們的年齡。
  3. 我們使用get()方法檢索了愛因斯坦的年齡。
  4. 我們使用containsKey()檢查是否有霍金的年齡。我們沒有,所以它打印了“沒有”的消息。
  5. 我們使用size()打印映射中的科學家數量。
  6. 我們使用remove()刪除了牛頓。
  7. 最後,我們使用for-each循環迭代所有剩余的鍵值對並打印它們。

就是這樣!您已經踏出了Java HashMap世界的第一步。記住,實踐使完美。嘗試創建您自己的具有不同數據類型的HashMap。也許創建一個您最喜愛的書籍及其作者的映射,或者您朋友的電話號碼。

HashMap在現實世界的編程中非常有用。它們就像數據結構的瑞士軍刀——多功能、高效且隨時方便使用。繼續探索,繼續編程,在您知道之前,您將成為HashMap的大師!

Credits: Image by storyset