Java HashMap

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

它以键/值对的形式存储元素。在这里,是用于将每个与映射关联的唯一标识符。

HashMap类实现了Map接口。

Java HashMap implements Map interface
Java HashMap实现

创建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}

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

在这里,我们使用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}

在上面的示例中,我们创建了一个名为numbersHashMap。在这里,我们使用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的哈希映射。在这里,我们正在访问哈希映射中的键/值映射。

另请阅读


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}

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

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

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战