Java集合框架中的HashMap
类提供了哈希表数据结构的功能。
它以键/值对的形式存储元素。在这里,键是用于将每个值与映射关联的唯一标识符。
HashMap
类实现了Map接口。

创建HashMap
为了创建哈希映射,我们必须首先导入java.util.HashMap
包。导入包后,我们可以在Java中创建哈希映射,如下所示。
// hashMap creation with 8 capacity and 0.6 load factor
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) {
// create a hashmap
HashMap<String, Integer> languages = new HashMap<>();
// add elements to 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}
在上面的示例中,我们创建了一个名为languages的HashMap
。
在这里,我们使用put()
方法向哈希映射添加元素。我们将在本教程后面详细介绍put()
方法。
Java HashMap的常用操作
HashMap
类提供了各种方法来执行哈希映射上的不同操作。在本教程中,我们将介绍一些常用的数组列表操作。
- 添加元素
- 访问元素
- 更改元素
- 删除元素
1.向HashMap添加元素
要向哈希映射添加单个元素,我们使用HashMap
类的put()
方法。例如,
import java.util.HashMap;
class Main {
public static void main(String[] args) {
// create a hashmap
HashMap<String, Integer> numbers = new HashMap<>();
System.out.println("Initial HashMap: " + numbers);
// put() method to add elements
numbers.put("One", 1);
numbers.put("Two", 2);
numbers.put("Three", 3);
System.out.println("HashMap after put(): " + numbers);
}
}
输出
Initial HashMap: {} HashMap after put(): {One=1, Two=2, Three=3}
在上面的示例中,我们创建了一个名为numbers的HashMap
。在这里,我们使用put()
方法向numbers添加元素。
请注意以下语句:
numbers.put("One", 1);
在这里,我们将字符串值One作为键,将整数值1作为值传递给put()
方法。
另请阅读
2.访问HashMap元素
我们可以使用get()
方法从哈希映射中访问值。例如,
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() method to get value
String value = languages.get(1);
System.out.println("Value at index 1: " + value);
}
}
输出
HashMap: {1=Java, 2=Python, 3=JavaScript} Value at index 1: Java
在上面的示例中,请注意表达式,
languages.get(1);
在这里,get()
方法将键作为其参数,并返回与该键关联的值。
我们还可以使用keySet()
、values()
和entrySet()
方法作为集合视图来访问哈希映射的键、值和键/值对。例如,
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);
// return set view of keys
// using keySet()
System.out.println("Keys: " + languages.keySet());
// return set view of values
// using values()
System.out.println("Values: " + languages.values());
// return set view of key/value pairs
// using entrySet()
System.out.println("Key/Value mappings: " + languages.entrySet());
}
}
输出
HashMap: {1=Java, 2=Python, 3=JavaScript} Keys: [1, 2, 3] Values: [Java, Python, JavaScript] Key/Value mappings: [1=Java, 2=Python, 3=JavaScript]
在上面的示例中,我们创建了一个名为languages的哈希映射。在这里,我们正在访问哈希映射中的键、值和键/值映射。
另请阅读
- Java HashMap get()
- Java Hashmap getOrDefault()
- Java HashMap keySet()
- Java HashMap values()
- Java HashMap entrySet()
3.更改HashMap的值
我们可以使用replace()
方法来更改哈希映射中与某个键关联的值。例如,
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("Original HashMap: " + languages);
// change element with key 2
languages.replace(2, "C++");
System.out.println("HashMap using replace(): " + languages);
}
}
输出
Original HashMap: {1=Java, 2=Python, 3=JavaScript} HashMap using replace(): {1=Java, 2=C++, 3=JavaScript}
在上面的示例中,我们创建了一个名为languages的哈希映射。请注意表达式,
languages.replace(2, "C++");
在这里,我们正在用新值C++更改键2引用的值。
HashMap
类还提供了一些replace()
方法的变体。要了解更多信息,请访问
4.移除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);
// remove element associated with key 2
String value = languages.remove(2);
System.out.println("Removed value: " + value);
System.out.println("Updated HashMap: " + languages);
}
}
输出
HashMap: {1=Java, 2=Python, 3=JavaScript} Removed value: Python Updated HashMap: {1=Java, 3=JavaScript}
在这里,remove()
方法将其键作为参数。然后它返回与键关联的值并移除条目。
我们也可以在某些条件下移除条目。例如,
remove(2, "C++");
在这里,如果键2与值C++关联,则remove()
方法仅移除条目。由于2不与C++关联,因此它不会移除条目。
要了解更多信息,请访问Java HashMap remove()。
HashMap的其他方法
方法 | 描述 |
---|---|
clear() | 从HashMap 中移除所有映射 |
compute() | 为指定键计算新值 |
computeIfAbsent() | 如果键没有映射,则计算值 |
computeIfPresent() | 如果键存在,则计算映射的值 |
merge() | 将指定的映射合并到HashMap |
clone() | 制作HashMap 的副本 |
containsKey() | 检查指定的键是否存在于Hashmap中 |
containsValue() | 检查Hashmap 是否包含指定的值 |
size() | 返回HashMap 中的项数 |
isEmpty() | 检查Hashmap 是否为空 |
遍历HashMap
要遍历哈希映射的每个条目,我们可以使用Java for-each循环。我们可以仅遍历键,仅遍历值,以及遍历键/值映射。例如,
import java.util.HashMap;
import java.util.Map.Entry;
class Main {
public static void main(String[] args) {
// create a HashMap
HashMap<Integer, String> languages = new HashMap<>();
languages.put(1, "Java");
languages.put(2, "Python");
languages.put(3, "JavaScript");
System.out.println("HashMap: " + languages);
// iterate through keys only
System.out.print("Keys: ");
for (Integer key : languages.keySet()) {
System.out.print(key);
System.out.print(", ");
}
// iterate through values only
System.out.print("\nValues: ");
for (String value : languages.values()) {
System.out.print(value);
System.out.print(", ");
}
// iterate through key/value entries
System.out.print("\nEntries: ");
for (Entry<Integer, String> entry : languages.entrySet()) {
System.out.print(entry);
System.out.print(", ");
}
}
}
输出
HashMap: {1=Java, 2=Python, 3=JavaScript} Keys: 1, 2, 3, Values: Java, Python, JavaScript, Entries: 1=Java, 2=Python, 3=JavaScript,
请注意,我们在上面的示例中使用了Map.Entry
。它是Map
接口的嵌套类,它返回映射的视图(元素)。
为了使用这个类,我们首先需要导入java.util.Map.Entry
包。
这个嵌套类返回映射的视图(元素)。
从其他Map创建HashMap
在Java中,我们也可以从其他Map创建哈希映射。例如,
import java.util.HashMap;
import java.util.TreeMap;
class Main {
public static void main(String[] args) {
// create a treemap
TreeMap<String, Integer> evenNumbers = new TreeMap<>();
evenNumbers.put("Two", 2);
evenNumbers.put("Four", 4);
System.out.println("TreeMap: " + evenNumbers);
// create hashmap from the treemap
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}
在上面的示例中,我们创建了一个名为evenNumbers
的TreeMap
。请注意表达式,
numbers = new HashMap<>(evenNumbers)
在这里,我们正在使用TreeMap
创建一个名为numbers的HashMap
。要了解有关treemap的更多信息,请访问Java TreeMap。
注意:在创建哈希映射时,我们可以包含可选参数:容量和负载因子。例如,
HashMap<K, V> numbers = new HashMap<>(8, 0.6f);
这里,
- 8(容量为8)-这意味着它可以存储8个条目。
- 0.6f(负载因子为0.6)-这意味着一旦我们的哈希表被填充了60%,条目就会被移动到一个大小是原始哈希表两倍的新哈希表中。
如果未使用可选参数,则默认容量为16,默认负载因子为0.75。