Java 中的 HashMap 介紹

Mehvish Ashiq 2023年10月12日
Java 中的 HashMap 介紹

本教程是關於 Java 中 HashMap 的介紹。我們將詳細學習 HashMap 並瞭解如何宣告和操作插入的資料。

Java 中的 HashMap 介紹

如果你正在學習 HashMap,那麼你對 ArrayList 有一個基本的瞭解。在陣列列表中,我們使用索引(即 int 型別編號)儲存和訪問陣列的元素。

另一方面,HashMap 將元素儲存在鍵值對中,我們可以通過使用另一種資料型別的鍵訪問值。例如,鍵是整數資料型別,值是字串資料型別,或者兩者都可以是整數或字串數​​據型別。

我們可以將值儲存在陣列列表中,那麼為什麼要使用 HashMap 呢?僅僅是因為通過鍵訪問值嗎?

不,這是因為效能。

假設我們想在列表中找到一個特定的元素;這將花費 O(n) 時間。如果使用二進位制搜尋對列表進行排序,則時間複雜度將為 O(log n)

但是,如果我們使用 HashMap,時間複雜度將是 O(1)(常數時間)來找到相同的值。

HashMap 位於 java.util 包中並實現 Map 介面。HashMap 類似於 HashTable 但不同步。

在 Java 中使用 HashMap 時要記住的要點

使用 HashMap 的人必須考慮以下幾點:

  • 插入重複鍵替換對應鍵的值。
  • 它具有基於該鍵的唯一鍵和值。請記住,這些值可能是多餘的。
  • Java HashMap 不保留任何順序。
  • HashMap 不同步。
  • Java HashMap 可能包含多個空值和一個空鍵。
  • HashMap 的初始預設容量為 16,負載因子為 0.75。

在 Java 中宣告並插入資料到 HashMap

在 Java 中宣告 HashMap 取決於我們想要什麼樣的安全型別。如果我們希望使用非泛型型別,我們可以如下宣告 HashMap。

示例程式碼:

import java.util.HashMap; // import the HashMap class

public class Main {
  public static void main(String[] args) {
    // create the hashmap object named students
    HashMap students = new HashMap();

    // add data in key-value form
    students.put(1, "Mehvish");
    students.put(2, "Thomas");
    students.put(3, "Christoper");
    students.put(4, "John");
    students.put("Jimi", "John");
    System.out.println(students);
  }
}

輸出:

{1=Mehvish, 2=Thomas, 3=Christoper, 4=John, Jimi=John}

在這裡,我們插入了前四個元素,其中鍵是整數資料型別,但第五個元素的鍵是字串資料型別。這意味著我們在鍵的資料型別上沒有一致性。

它也可能發生在值上。由於這種情況併為避免這種情況,我們可以使用泛型型別並宣告 HashMap,如下所示。

示例程式碼:

import java.util.HashMap; // import the HashMap class

public class Main {
  public static void main(String[] args) {
    // create the hashmap object named students
    HashMap<Integer, String> students = new HashMap<Integer, String>();

    // add data in key-value form (roll number, name)
    students.put(1, "Mehvish");
    students.put(2, "Thomas");
    students.put(3, "Christoper");
    students.put(4, "John");

    // print whole hashmap
    System.out.println(students);
  }
}

輸出:

{1=Mehvish, 2=Thomas, 3=Christoper, 4=John}

觀察 HashMap 宣告部分;它具有鍵和值的特定資料型別。我們不能插入與指定資料型別不同的元素(鍵值對)。

有時,我們將來需要將實現更改為 LinkedHashMap 或 TreeMap。在這種情況下,如下宣告 HashMap 會很有幫助。

請記住,students 是此處 Map 中的型別。我們必須將 Map 類匯入為 import java.util.Map; 通過以下方式宣告 HashMap。

Map<Integer, String> students = new HashMap<Integer, String>();

使用 get() 方法訪問 HashMap 的值

示例程式碼:

import java.util.HashMap; // import the HashMap class

public class Main {
  public static void main(String[] args) {
    // create the hashmap object named students
    HashMap<Integer, String> students = new HashMap<Integer, String>();

    // add data in key-value form (roll number, name)
    students.put(1, "Mehvish");
    students.put(2, "Thomas");
    students.put(3, "Christoper");
    students.put(4, "John");

    // print whole hashmap
    System.out.println(students);
    System.out.println(students.get(2));
  }
}

輸出:

{1=Mehvish, 2=Thomas, 3=Christoper, 4=John}
Thomas

在此示例中,put() 用於將特定元素(鍵值對)插入 HashMap。它有兩個引數,鍵和與該鍵對應的值。

get() 方法獲取鍵並從 HashMap 中檢索相應的值。

使用 remove() 方法從 HashMap 中刪除專案

示例程式碼:

import java.util.HashMap; // import the HashMap class

public class Main {
  public static void main(String[] args) {
    // create the hashmap object named students
    HashMap<Integer, String> students = new HashMap<Integer, String>();

    // add data in key-value form (roll number, name)
    students.put(1, "Mehvish");
    students.put(2, "Thomas");
    students.put(3, "Christoper");
    students.put(4, "John");

    // print whole hashmap
    System.out.println(students);
    System.out.println(students.remove(2));
    System.out.println(students);
  }
}

輸出:

{1=Mehvish, 2=Thomas, 3=Christoper, 4=John}
Thomas
{1=Mehvish, 3=Christoper, 4=John}

remove() 函式接受鍵並從 HashMap 中刪除相應的項(鍵值對)。

在這裡,我們在刪除前後列印整個 HashMap。你可能會看到差異並進行觀察。

使用 replace() 方法更新 HashMap 中的值

示例程式碼:

import java.util.HashMap; // import the HashMap class

public class Main {
  public static void main(String[] args) {
    // create the hashmap object named students
    HashMap<Integer, String> students = new HashMap<Integer, String>();

    // add data in key-value form (roll number, name)
    students.put(1, "Mehvish");
    students.put(2, "Thomas");
    students.put(3, "Christoper");
    students.put(4, "John");

    // print whole hashmap
    System.out.println(students);
    students.replace(1, "Sania") System.out.println(students);
  }
}

輸出:

{1=Mehvish, 2=Thomas, 3=Christoper, 4=John}
{1=Sania, 2=Thomas, 3=Christoper, 4=John}

本節使用 replace() 方法,該方法獲取鍵和我們要在指定鍵處替換的值。在此示例中,我們在更新給定鍵的值之前和之後列印完整的 HashMap。

你可以在此處找到其他方法並使用它們來更新 HashMap 中的值。

作者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

相關文章 - Java HashMap