如何检查 Java 中的 Map 是否为空

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何检查 Java 中的 Map 是否为空。我们将探讨实现这一常见操作的不同方法,首先是简单直接的 isEmpty() 方法。你还将学习如何使用 size() 方法检查映射的大小,重要的是,如何处理映射本身可能为 null 的情况,以防止潜在的 NullPointerException 错误。在本实验结束时,你将能够熟练地在各种场景下判断 Java 映射是否为空。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/BasicSyntaxGroup -.-> java/operators("Operators") java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/hashmap("HashMap") subgraph Lab Skills java/operators -.-> lab-559953{{"如何检查 Java 中的 Map 是否为空"}} java/if_else -.-> lab-559953{{"如何检查 Java 中的 Map 是否为空"}} java/collections_methods -.-> lab-559953{{"如何检查 Java 中的 Map 是否为空"}} java/hashmap -.-> lab-559953{{"如何检查 Java 中的 Map 是否为空"}} end

使用 isEmpty() 检查映射

在这一步中,你将学习如何使用 isEmpty() 方法检查 Java 中的 Map 是否为空。Map 是键值对的集合,检查其是否为空是一项常见操作。

首先,在你的 ~/project 目录下创建一个名为 MapCheck.java 的新 Java 文件。你可以通过在左侧的文件资源管理器中右键单击,选择“新建文件”,然后输入 MapCheck.java 来完成此操作。

现在,在编辑器中打开 MapCheck.java 文件,并添加以下代码:

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

public class MapCheck {

    public static void main(String[] args) {
        // Create an empty Map
        Map<String, Integer> emptyMap = new HashMap<>();

        // Check if the map is empty using isEmpty()
        boolean isEmpty = emptyMap.isEmpty();

        // Print the result
        System.out.println("Is the map empty? " + isEmpty);

        // Create a non-empty Map
        Map<String, Integer> nonEmptyMap = new HashMap<>();
        nonEmptyMap.put("one", 1);
        nonEmptyMap.put("two", 2);

        // Check if the non-empty map is empty
        boolean isNonEmpty = nonEmptyMap.isEmpty();

        // Print the result
        System.out.println("Is the non-empty map empty? " + isNonEmpty);
    }
}

下面来详细分析这段代码:

  • import java.util.HashMap;import java.util.Map;:这两行代码导入了处理 Map 所需的类。
  • Map<String, Integer> emptyMap = new HashMap<>();:这行代码创建了一个新的空 HashMapHashMapMap 接口的一个常见实现。这里指定键的类型为 String,值的类型为 Integer
  • boolean isEmpty = emptyMap.isEmpty();:这行代码使用了 isEmpty() 方法。如果映射中不包含任何键值对,该方法返回 true,否则返回 false。结果存储在布尔型变量 isEmpty 中。
  • System.out.println("Is the map empty? " + isEmpty);:这行代码将检查结果打印到控制台。
  • 代码随后对 nonEmptyMap 重复上述过程,以展示当映射不为空时 isEmpty() 方法的工作方式。

保存 MapCheck.java 文件(使用 Ctrl+S 或 Cmd+S)。

现在,打开 WebIDE 底部的终端。确保你位于 ~/project 目录下。

使用 javac 命令编译 Java 代码:

javac MapCheck.java

如果没有错误,~/project 目录下将生成一个 MapCheck.class 文件。

最后,使用 java 命令运行编译后的 Java 程序:

java MapCheck

你应该会看到以下输出:

Is the map empty? true
Is the non-empty map empty? false

这个输出证实了 isEmpty() 方法能够正确识别空映射和非空映射。使用 isEmpty() 是检查映射是否为空的推荐方法,因为它清晰且高效。

使用 size() 检查映射大小

在这一步中,你将学习如何使用 size() 方法获取 Map 中键值对的数量。当你需要了解映射中当前存储了多少个元素时,这一方法非常有用。

我们将继续使用上一步创建的 MapCheck.java 文件。在 WebIDE 编辑器中打开 MapCheck.java

现在,让我们修改 main 方法,以包含检查映射大小的功能。将 main 方法中的现有代码替换为以下内容:

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

public class MapCheck {

    public static void main(String[] args) {
        // Create an empty Map
        Map<String, Integer> emptyMap = new HashMap<>();

        // Check the size of the empty map using size()
        int emptySize = emptyMap.size();

        // Print the result
        System.out.println("Size of the empty map: " + emptySize);

        // Create a non-empty Map
        Map<String, Integer> nonEmptyMap = new HashMap<>();
        nonEmptyMap.put("one", 1);
        nonEmptyMap.put("two", 2);
        nonEmptyMap.put("three", 3); // Add one more element

        // Check the size of the non-empty map
        int nonEmptySize = nonEmptyMap.size();

        // Print the result
        System.out.println("Size of the non-empty map: " + nonEmptySize);
    }
}

下面来看看修改的部分:

  • int emptySize = emptyMap.size();:这行代码调用了 emptyMapsize() 方法。size() 方法以整数形式返回映射中键值对的数量。结果存储在整数变量 emptySize 中。
  • System.out.println("Size of the empty map: " + emptySize);:这行代码打印出空映射的大小。
  • 我们还向 nonEmptyMap 中添加了一个额外的元素("three", 3),以展示大小的变化。
  • int nonEmptySize = nonEmptyMap.size();:这行代码调用 nonEmptyMapsize() 方法来获取其大小。
  • System.out.println("Size of the non-empty map: " + nonEmptySize);:这行代码打印出非空映射的大小。

保存 MapCheck.java 文件(使用 Ctrl+S 或 Cmd+S)。

现在,打开终端并确保你位于 ~/project 目录下。

编译修改后的 Java 代码:

javac MapCheck.java

如果编译成功,运行程序:

java MapCheck

你应该会看到以下输出:

Size of the empty map: 0
Size of the non-empty map: 3

这个输出表明 size() 方法正确报告了空映射和非空映射中的元素数量。size() 方法是确定 Java Map 中当前条目数量的一种简单有效的方法。

处理空映射(Null Maps)

在前面的步骤中,我们处理的映射要么为空,要么包含元素。然而,考虑 Map 变量为 null 时的情况非常重要。null 引用意味着该变量在内存中不指向任何对象。尝试对 null 映射调用 isEmpty()size() 等方法会导致 NullPointerException,这是 Java 中常见的错误。

在这一步中,你将学习如何在尝试检查映射是否为空或其大小时,安全地处理可能的 null 映射引用。

再次在 WebIDE 编辑器中打开 MapCheck.java 文件。

让我们添加代码来演示并处理 null 映射。修改 main 方法,使其包含以下内容:

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

public class MapCheck {

    public static void main(String[] args) {
        // Create an empty Map
        Map<String, Integer> emptyMap = new HashMap<>();

        // Check the size of the empty map using size()
        int emptySize = emptyMap.size();

        // Print the result
        System.out.println("Size of the empty map: " + emptySize);

        // Create a non-empty Map
        Map<String, Integer> nonEmptyMap = new HashMap<>();
        nonEmptyMap.put("one", 1);
        nonEmptyMap.put("two", 2);
        nonEmptyMap.put("three", 3); // Add one more element

        // Check the size of the non-empty map
        int nonEmptySize = nonEmptyMap.size();

        // Print the result
        System.out.println("Size of the non-empty map: " + nonEmptySize);

        // Declare a Map variable but don't initialize it (it will be null)
        Map<String, Integer> nullMap = null;

        // --- Handling the null map ---

        // Check if the map is null before calling methods
        if (nullMap == null) {
            System.out.println("The nullMap is null.");
        } else {
            // This block will not be executed for nullMap
            System.out.println("Is the nullMap empty? " + nullMap.isEmpty());
            System.out.println("Size of the nullMap: " + nullMap.size());
        }

        // A safer way to check if a map is empty (handles null)
        boolean isNullMapEmpty = (nullMap == null || nullMap.isEmpty());
        System.out.println("Is the nullMap considered empty (including null)? " + isNullMapEmpty);

        // A safer way to get the size (handles null)
        int nullMapSize = (nullMap == null) ? 0 : nullMap.size();
        System.out.println("Size of the nullMap (handling null): " + nullMapSize);
    }
}

以下是我们添加的内容:

  • Map<String, Integer> nullMap = null;:这行代码声明了一个 Map 变量,但明确将其设置为 null
  • if (nullMap == null) { ... }:这是处理 null 的关键部分。在尝试对 nullMap 调用任何方法之前,我们先检查该变量是否为 null。如果为 null,则打印一条消息。如果不为 null,则执行 else 块,我们可以安全地调用 isEmpty()size() 方法。
  • boolean isNullMapEmpty = (nullMap == null || nullMap.isEmpty());:这是一种常见的模式,用于检查映射是否实际上“为空”,其中包括映射引用本身为 null 的情况。||(逻辑或)运算符表示,如果 nullMap == nulltrue,则整个表达式为 true,并且不会计算 nullMap.isEmpty(),从而避免了 NullPointerException
  • int nullMapSize = (nullMap == null) ? 0 : nullMap.size();:这行代码使用三元运算符 (? :) 来安全地获取大小。如果 nullMapnull,则表达式的值为 0;否则,表达式的值为 nullMap.size()

保存 MapCheck.java 文件(使用 Ctrl+S 或 Cmd+S)。

在终端中编译修改后的代码:

javac MapCheck.java

运行程序:

java MapCheck

你应该会看到类似以下的输出:

Size of the empty map: 0
Size of the non-empty map: 3
The nullMap is null.
Is the nullMap considered empty (including null)? true
Size of the nullMap (handling null): 0

注意,nullMapelse 块内的代码行没有执行,并且我们成功检查了 nullMap 是否为 null,并获取了其大小(将 null 视为大小为 0),而没有引发错误。

在 Java 中,处理 null 引用对于防止 NullPointerException 并使你的程序更健壮非常重要。在对变量调用方法之前,始终要考虑该变量是否可能为 null

总结

在本次实验中,你学习了如何检查 Java 中的 Map 是否为空。你探索了实现此功能的主要方法 isEmpty(),它能直接表明映射中是否包含任何键值对。你了解了如何将此方法应用于新创建的空映射和已填充数据的映射,展示了其简单的用法以及返回的布尔结果。

除了基本的 isEmpty() 检查,你还学习了其他方法,例如使用 size() 来判断映射的大小是否为零,这在功能上等同于检查是否为空。此外,你还处理了一个关键问题,即如何处理可能的 null 映射引用,以防止出现 NullPointerException,强调了在尝试对映射对象调用方法之前进行空值检查的重要性。