跳到主要内容

Java HashMap

提示
  1. HashMap 特性和创建HashMap 是基于哈希表的 Map 实现,以键/值对形式存储元素,可以通过键值或文件对象创建。
  2. 基本操作HashMap 提供方法如 put() 添加元素,get() 访问元素,replace() 修改元素,和 remove() 删除元素。
  3. 遍历和其他操作:支持使用 for-each 循环遍历键、值或键/值对,还提供了 clear(), size(), isEmpty() 等其他实用方法。

Java 集合框架的 HashMap 类提供了 哈希表数据结构的功能。

它以键/值对的形式存储元素。这里,是用于将每个与地图上的对应位置关联的唯一标识符。

HashMap 类实现了 Map 接口。

Java HashMap 实现 Map 接口

创建 HashMap

为了创建哈希映射,我们首先必须导入 java.util.HashMap 包。导入包之后,以下是我们在 Java 中创建哈希映射的方式。

// 创建容量为 8 和负载因子为 0.6 的 hashMap
HashMap<K, V> numbers = new HashMap<>();

在上述代码中,我们创建了一个名为 numbers 的哈希映射。这里,K 代表键的类型,V 代表值的类型。例如,

HashMap<String, Integer> numbers = new HashMap<>();

这里,的类型是 String的类型是 Integer

示例 1:在 Java 中创建 HashMap

import java.util.HashMap;

class Main {
public static void main(String[] args) {

// 创建一个 hashmap
HashMap<String, Integer> languages = new HashMap<>();

// 向 hashmap 添加元素
languages.put("Java", 8);
languages.put("JavaScript", 1);
languages.put("Python", 3);
System.out.println("HashMap: " + languages);
}
}

输出

HashMap: {Java=8, JavaScript=1, Python=3}

在上面的示例中,我们创建了一个名为 languagesHashMap

这里,我们使用了 put() 方法向哈希映射中添加元素。我们将在本教程后面了解更多关于 put() 方法的信息。

Java HashMap 上的基本操作

HashMap 类提供了各种方法来执行不同的哈希映射操作。在本教程中,我们将查看一些常用的 arrayList 操作:

  • 添加元素
  • 访问元素
  • 更改元素
  • 删除元素

1. 向 HashMap 添加元素

要向哈希映射添加单个元素,我们使用 HashMap 类的 put() 方法。例如,

import java.util.HashMap;

class Main {
public static void main(String[] args) {

// 创建一个 hashmap
HashMap<String, Integer> numbers = new HashMap<>();

System.out.println("初始 HashMap: " + numbers);
// 使用 put() 方法添加元素
numbers.put("One", 1);
numbers.put("Two", 2);
numbers.put("Three", 3);
System.out.println("put() 后的 HashMap: " + numbers);
}
}

输出

初始 HashMap: {}
put() 后的 HashMap: {One=1, Two=2, Three=3}

在上面的示例中,我们创建了一个名为 numbersHashMap。这里,我们使用了 put() 方法向 numbers 添加元素。

注意这个声明,

numbers.put("One", 1);

在这里,我们将 String 类型的值 One 作为键,将 Integer 类型的值 1 作为值传递给 put() 方法。

推荐阅读

2. 访问 HashMap 元素

我们可以使用 get() 方法从 hashmap 中获取值。例如,

import java.util.HashMap;

class Main {
public static void main(String[] args) {

HashMap<Integer, String> languages = new HashMap<>();
languages.put(1, "Java");
languages.put(2, "Python");
languages.put(3, "JavaScript");
System.out.println("HashMap: " + languages);

// 使用 get() 方法获取值
String value = languages.get(1);
System.out.println("索引为 1 的值: " + value);
}
}

输出

HashMap: {1=Java, 2=Python, 3=JavaScript}
索引为 1 的值: Java

在上面的例子中,注意这个表达式,

languages.get(1);

这里,get() 方法以 作为参数,并返回与该键关联的相应

我们还可以使用 keySet()values()entrySet() 方法分别访问 hashmap 的 键/值 对集合视图。例如,

import java.util.HashMap;

class Main {
public static void main(String[] args) {
HashMap<Integer, String> languages = new HashMap<>();

languages.put(1, "Java");
languages.put(2, "Python");
languages.put(3, "JavaScript");
System.out.println("HashMap: " + languages);

// 返回键的集合视图
// 使用 keySet()
System.out.println("键: " + languages.keySet());

// 返回值的集合视图
// 使用 values()
System.out.println("值: " + languages.values());

// 返回键/值对的集合视图
// 使用 entrySet()
System.out.println("键/值映射: " + languages.entrySet());
}
}

输出

HashMap: {1=Java, 2=Python, 3=JavaScript}
: [1, 2, 3]
: [Java, Python, JavaScript]
/值映射: [1=Java, 2=Python, 3=JavaScript]

在上面的例子中,我们创建了一个名为 languages 的 hashmap。这里,我们正在访问 hashmap 的 键/值 映射。

推荐阅读

3. 更改 HashMap 值

我们可以使用 replace() 方法更改 hashmap 中与键关联的值。例如,

import java.util.HashMap;

class Main {
public static void main(String[] args) {

HashMap<Integer, String> languages = new HashMap<>();
languages.put(1, "Java");
languages.put(2, "Python");
languages.put(3, "JavaScript");
System.out.println("原始 HashMap: " + languages);

// 更改键为 2 的元素
languages.replace(2, "C++");
System.out.println("使用 replace() 的 HashMap: " + languages);
}
}

输出

原始 HashMap: {1=Java, 2=Python, 3=JavaScript}
使用 replace()HashMap: {1=Java, 2=C++, 3=JavaScript}

在上面的例子中,我们创建了一个名为 languages 的 hashmap。注意这个表达式,

languages.replace(2, "C++");

这里,我们正在将键 **2

** 所指的值更改为新值 C++

HashMap 类还提供了 replace() 方法的一些变体。要了解更多,请访问

4. 删除 HashMap 元素

要从 hashmap 中删除元素,我们可以使用 remove() 方法。例如,

import java.util.HashMap;

class Main {
public static void main(String[] args) {

HashMap<Integer, String> languages = new HashMap<>();
languages.put(1, "Java");
languages.put(2, "Python");
languages.put(3, "JavaScript");
System.out.println("HashMap: " + languages);

// 删除与键 2 关联的元素
String value = languages.remove(2);
System.out.println("删除的值: " + value);

System.out.println("更新后的 HashMap: " + languages);
}
}

输出

HashMap: {1=Java, 2=Python, 3=JavaScript}
删除的值: Python
更新后的 HashMap: {1=Java, 3=JavaScript}

这里,remove() 方法以 为参数。然后它返回与 关联的 并删除该 条目

我们还可以只在特定条件下删除条目。例如,

remove(2, "C++");

这里,remove() 方法只在 键 2值 C++ 关联时才删除 条目。由于 2C++ 无关联,因此不删除该条目。

要了解更多,请访问 Java HashMap remove()

HashMap 的其他方法

方法描述
clear()HashMap 中删除所有映射
compute()为指定键计算新值
computeIfAbsent()如果键未映射,则计算值
computeIfPresent()如果键存在,则计算映射值
merge()将指定映射合并到 HashMap
clone()复制 HashMap
containsKey()检查 Hashmap 中是否存在指定键
containsValue()检查 Hashmap 是否包含指定值
size()返回 HashMap 中的项数
isEmpty()检查 Hashmap 是否为空

遍历 HashMap

要遍历 hashmap 的每个条目,我们可以使用 Java for-each 循环。我们可以分别遍历 仅键仅值键/值映射。例如,

import java.util.HashMap;
import java.util.Map.Entry;

class Main {
public static void main(String[] args) {

// 创建一个 HashMap
HashMap<Integer, String> languages = new HashMap<>();
languages.put(1, "Java");
languages.put(2, "Python");
languages.put(3, "JavaScript");
System.out.println("HashMap: " + languages);

// 仅遍历键
System.out.print("键: ");
for (Integer key : languages.keySet()) {
System.out.print(key);
System.out.print(", ");
}

// 仅遍历值
System.out.print("\n值: ");
for (String value : languages.values()) {
System.out.print(value);
System.out.print(", ");


}

// 遍历键/值条目
System.out.print("\n条目: ");
for (Entry<Integer, String> entry : languages.entrySet()) {
System.out.print(entry);
System.out.print(", ");
}
}
}

输出

HashMap: {1=Java, 2=Python, 3=JavaScript}
: 1, 2, 3,
: Java, Python, JavaScript,
条目: 1=Java, 2=Python, 3=JavaScript,

请注意,在上面的示例中我们使用了 Map.Entry。它是 Map 接口的嵌套类,用于返回映射的视图(元素)。

要使用这个类,我们首先需要导入 java.util.Map.Entry 包。

这个嵌套类返回映射的视图(元素)。

从其他 Map 创建 HashMap

在 Java 中,我们还可以从其他 map 创建 hashmap。例如,

import java.util.HashMap;
import java.util.TreeMap;

class Main {
public static void main(String[] args) {

// 创建一个 TreeMap
TreeMap<String, Integer> evenNumbers = new TreeMap<>();
evenNumbers.put("Two", 2);
evenNumbers.put("Four", 4);
System.out.println("TreeMap: " + evenNumbers);

// 从 TreeMap 创建 HashMap
HashMap<String, Integer> numbers = new HashMap<>(evenNumbers);
numbers.put("Three", 3);
System.out.println("HashMap: " + numbers);
}
}

输出

TreeMap: {Four=4, Two=2}
HashMap: {Two=2, Three=3, Four=4}

在上面的例子中,我们创建了一个名为 evenNumbersTreeMap。注意这个表达式,

numbers = new HashMap<>(evenNumbers)

这里,我们使用 TreeMap 创建了一个名为 numbers 的 HashMap。要了解更多关于 treemap 的信息,请访问 Java TreeMap

注意:在创建 hashmap 时,我们可以包含可选参数:容量加载因子。例如,

HashMap<K, V> numbers = new HashMap<>(8, 0.6f);

这里,

  • 8(容量为 8)- 这意味着它可以存储 8 个条目。
  • 0.6f(加载因子为 0.6)- 这意味着当我们的哈希表填充到 60% 时,条目会被移到一个新的哈希表中,其大小是原始哈希表的两倍。

如果未使用可选参数,则默认容量将为 16,默认加载因子将为 0.75