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