介绍
在这个实验中,你将学习如何有效地检查 Java Map 中是否存在特定的键。这是一项防止错误并确保 Map 操作稳健性的关键技能。
我们将探讨用于检查键是否存在的基本 containsKey() 方法,展示它在不同键类型下的使用方式,并说明如何处理空键,从而让你全面了解 Java Map 中的键检查操作。
使用 containsKey() 方法检查键
在这一步中,你将学习如何使用 containsKey() 方法检查 HashMap 中是否存在特定的键。在处理 Map 时,这是一项基本操作,它能让你避免因尝试访问不存在的键而可能出现的错误。
HashMap 是 Java 中的一种数据结构,用于存储键值对。你可以把它想象成一本字典,每个单词(键)都有一个释义(值)。containsKey() 方法就像是问字典:“你有这个特定单词的条目吗?”
让我们创建一个简单的 Java 程序来演示如何使用 containsKey()。
在 WebIDE 编辑器中打开
HelloJava.java文件。如果你完成了上一个实验,这个文件应该已经存在于你的~/project目录中。将
HelloJava.java中的现有代码替换为以下代码:import java.util.HashMap; public class HelloJava { public static void main(String[] args) { // Create a HashMap HashMap<String, String> userMap = new HashMap<>(); // Add some key-value pairs userMap.put("alice", "Alice Smith"); userMap.put("bob", "Bob Johnson"); userMap.put("charlie", "Charlie Brown"); // Check if a key exists using containsKey() String keyToCheck1 = "alice"; String keyToCheck2 = "david"; System.out.println("Checking for key: " + keyToCheck1); if (userMap.containsKey(keyToCheck1)) { System.out.println("Key '" + keyToCheck1 + "' exists in the map."); } else { System.out.println("Key '" + keyToCheck1 + "' does not exist in the map."); } System.out.println("\nChecking for key: " + keyToCheck2); if (userMap.containsKey(keyToCheck2)) { System.out.println("Key '" + keyToCheck2 + "' exists in the map."); } else { System.out.println("Key '" + keyToCheck2 + "' does not exist in the map."); } } }让我们来看看这段代码的新部分:
import java.util.HashMap;:这行代码导入了HashMap类,我们需要使用它来创建HashMap。HashMap<String, String> userMap = new HashMap<>();:这行代码创建了一个新的HashMap,其中键和值都是String类型。userMap.put("alice", "Alice Smith");:这行代码向Map中添加了一个键值对。键是"alice",值是"Alice Smith"。userMap.containsKey(keyToCheck1):这是这一步的核心。containsKey()方法接受一个键作为参数,如果在Map中找到该键,则返回true,否则返回false。
保存
HelloJava.java文件(Ctrl+S 或 Cmd+S)。现在,在终端中使用
javac命令编译程序:javac HelloJava.java如果没有错误,你将看不到任何输出。
最后,使用
java命令运行编译后的程序:java HelloJava你应该会看到类似于以下的输出:
Checking for key: alice Key 'alice' exists in the map. Checking for key: david Key 'david' does not exist in the map.
这个输出证实了 containsKey() 方法正确地识别了 "alice" 和 "david" 这两个键是否存在于我们的 userMap 中。
使用不同类型的键进行测试
在上一步中,我们在 HashMap 里使用了 String 类型的键。不过,HashMap 可以使用各种数据类型作为键,只要它们是对象(像 int、char 等基本数据类型会自动“装箱”成对应的对象包装类,如 Integer、Character)。
在这一步,我们将探索在 HashMap 中使用不同的数据类型作为键,并了解 containsKey() 方法如何处理这些键。
在 WebIDE 编辑器中打开
HelloJava.java文件。将现有代码替换为以下代码:
import java.util.HashMap; public class HelloJava { public static void main(String[] args) { // Create a HashMap with Integer keys and String values HashMap<Integer, String> studentMap = new HashMap<>(); // Add some key-value pairs studentMap.put(101, "Alice Smith"); studentMap.put(102, "Bob Johnson"); studentMap.put(103, "Charlie Brown"); // Check for keys using containsKey() with Integer keys Integer keyToCheck1 = 101; Integer keyToCheck2 = 200; // A key that does not exist System.out.println("Checking for key: " + keyToCheck1); if (studentMap.containsKey(keyToCheck1)) { System.out.println("Key '" + keyToCheck1 + "' exists in the map."); } else { System.out.println("Key '" + keyToCheck1 + "' does not exist in the map."); } System.out.println("\nChecking for key: " + keyToCheck2); if (studentMap.containsKey(keyToCheck2)) { System.out.println("Key '" + keyToCheck2 + "' exists in the map."); } else { System.out.println("Key '" + keyToCheck2 + "' does not exist in the map."); } // You can also use primitive int directly, Java will auto-box it int primitiveKey = 102; System.out.println("\nChecking for primitive key: " + primitiveKey); if (studentMap.containsKey(primitiveKey)) { System.out.println("Key '" + primitiveKey + "' exists in the map."); } else { System.out.println("Key '" + primitiveKey + "' does not exist in the map."); } } }在这段代码中,我们创建了一个
HashMap,其中键是Integer对象(代表学生 ID),值是String对象(代表学生姓名)。然后,我们使用containsKey()方法,分别传入Integer对象和基本数据类型int,以此展示 Java 会为你处理类型转换(自动装箱)。保存
HelloJava.java文件。编译程序:
javac HelloJava.java运行程序:
java HelloJava你应该会看到类似以下的输出:
Checking for key: 101 Key '101' exists in the map. Checking for key: 200 Key '200' does not exist in the map. Checking for primitive key: 102 Key '102' exists in the map.
这表明 containsKey() 方法在处理 Integer 类型的键时能正常工作,并且 Java 的自动装箱特性允许你在 HashMap<Integer, ...> 中直接使用基本数据类型 int 来检查键是否存在。
处理空键
在 Java 的 HashMap 中,你实际上可以使用 null 作为键,但只允许有一个 null 键。了解 containsKey() 方法在处理 null 键时的行为非常重要。
在这一步,我们将修改程序,使其包含一个 null 键,然后使用 containsKey() 方法检查该键是否存在。
在 WebIDE 编辑器中打开
HelloJava.java文件。将现有代码替换为以下代码:
import java.util.HashMap; public class HelloJava { public static void main(String[] args) { // Create a HashMap that allows null keys HashMap<String, String> statusMap = new HashMap<>(); // Add some key-value pairs, including a null key statusMap.put("active", "User is currently online"); statusMap.put("inactive", "User is offline"); statusMap.put(null, "User status is unknown"); // Adding a null key // Check for keys using containsKey(), including null String keyToCheck1 = "active"; String keyToCheck2 = "pending"; // A key that does not exist String keyToCheck3 = null; // The null key System.out.println("Checking for key: " + keyToCheck1); if (statusMap.containsKey(keyToCheck1)) { System.out.println("Key '" + keyToCheck1 + "' exists in the map."); } else { System.out.println("Key '" + keyToCheck1 + "' does not exist in the map."); } System.out.println("\nChecking for key: " + keyToCheck2); if (statusMap.containsKey(keyToCheck2)) { System.out.println("Key '" + keyToCheck2 + "' exists in the map."); } else { System.out.println("Key '" + keyToCheck2 + "' does not exist in the map."); } System.out.println("\nChecking for null key:"); if (statusMap.containsKey(keyToCheck3)) { System.out.println("Null key exists in the map."); } else { System.out.println("Null key does not exist in the map."); } } }在这里,我们创建了一个键和值均为
String类型的HashMap。然后,我们使用statusMap.put(null, "User status is unknown");显式地添加了一个null键。最后,我们使用containsKey(null)来检查null键是否存在。保存
HelloJava.java文件。编译程序:
javac HelloJava.java运行程序:
java HelloJava你应该会看到类似以下的输出:
Checking for key: active Key 'active' exists in the map. Checking for key: pending Key 'pending' does not exist in the map. Checking for null key: Null key exists in the map.
这个输出证实了 containsKey() 方法能够正确识别 HashMap 中 null 键的存在。虽然可以使用 null 键,但通常建议尽可能避免使用,以使代码更清晰,并防止程序其他部分可能出现的 NullPointerException 问题。
总结
在本次实验中,我们学习了如何使用 containsKey() 方法来检查 Java HashMap 中是否存在特定的键。这一基本操作对于在访问映射元素时避免错误至关重要。我们练习了对字符串键使用 containsKey() 方法,并观察到它能正确识别存在和不存在的键。



