如何检查 Java 中的列表是否为空

JavaJavaBeginner
立即练习

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

简介

在这个实验中,你将学习如何有效地检查 Java 中的列表是否为空。我们将探讨标准的 isEmpty() 方法,使用 size() 验证列表大小,并了解如何处理潜在的空列表场景,以编写健壮可靠的代码。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/DataStructuresGroup -.-> java/arrays_methods("Arrays Methods") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("Exceptions") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/arraylist("ArrayList") subgraph Lab Skills java/arrays_methods -.-> lab-559949{{"如何检查 Java 中的列表是否为空"}} java/collections_methods -.-> lab-559949{{"如何检查 Java 中的列表是否为空"}} java/exceptions -.-> lab-559949{{"如何检查 Java 中的列表是否为空"}} java/arraylist -.-> lab-559949{{"如何检查 Java 中的列表是否为空"}} end

使用 isEmpty() 检查列表

在这一步中,你将学习如何使用 isEmpty() 方法来检查 Java 中的列表是否为空。这是编程中的常见任务,而 isEmpty() 提供了一种清晰且高效的实现方式。

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

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

import java.util.ArrayList;
import java.util.List;

public class ListCheck {

    public static void main(String[] args) {
        // Create an empty list
        List<String> emptyList = new ArrayList<>();

        // Create a list with elements
        List<String> populatedList = new ArrayList<>();
        populatedList.add("Apple");
        populatedList.add("Banana");

        // Check if the lists are empty using isEmpty()
        System.out.println("Is emptyList empty? " + emptyList.isEmpty());
        System.out.println("Is populatedList empty? " + populatedList.isEmpty());
    }
}

让我们来详细分析这段代码:

  • import java.util.ArrayList;import java.util.List;:这两行代码导入了处理列表所需的类。
  • List<String> emptyList = new ArrayList<>();:这行代码创建了一个新的空列表,该列表可以存储 String 对象。
  • List<String> populatedList = new ArrayList<>();:这行代码创建了另一个新列表。
  • populatedList.add("Apple");populatedList.add("Banana");:这两行代码向 populatedList 中添加元素。
  • System.out.println("Is emptyList empty? " + emptyList.isEmpty());:这行代码调用 emptyListisEmpty() 方法。如果列表中没有元素,isEmpty() 方法将返回 true,否则返回 false。然后将结果打印到控制台。
  • System.out.println("Is populatedList empty? " + populatedList.isEmpty());:这行代码对 populatedList 执行相同的操作。

保存 ListCheck.java 文件。

现在,打开 WebIDE 底部的终端,并确保你位于 ~/project 目录下。如果需要,你可以使用 cd ~/project 命令。

使用 javac 命令编译 Java 代码:

javac ListCheck.java

如果没有错误,~/project 目录下将创建一个 ListCheck.class 文件。

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

java ListCheck

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

Is emptyList empty? true
Is populatedList empty? false

此输出证实了 isEmpty() 方法能够正确识别空列表和包含元素的列表。在 Java 中,使用 isEmpty() 是检查列表是否为空的首选方法,因为它比检查列表大小更具可读性,并且可能更高效。

使用 size() 验证列表大小

在上一步中,我们学习了如何使用 isEmpty() 方法检查列表是否为空。虽然 isEmpty() 非常适合检查列表中是否有元素,但有时你需要确切知道列表中元素的数量。为此,Java 提供了 size() 方法。

在这一步中,我们将修改 ListCheck.java 文件以使用 size() 方法,并了解它的工作原理。

如果 ListCheck.java 文件尚未在 WebIDE 编辑器中打开,请打开它。该文件应该位于你的 ~/project 目录下。

现在,让我们在 main 方法中添加一些代码行,以打印列表的大小。在使用 isEmpty() 的代码行之后添加以下代码行:

import java.util.ArrayList;
import java.util.List;

public class ListCheck {

    public static void main(String[] args) {
        // Create an empty list
        List<String> emptyList = new ArrayList<>();

        // Create a list with elements
        List<String> populatedList = new ArrayList<>();
        populatedList.add("Apple");
        populatedList.add("Banana");

        // Check if the lists are empty using isEmpty()
        System.out.println("Is emptyList empty? " + emptyList.isEmpty());
        System.out.println("Is populatedList empty? " + populatedList.isEmpty());

        // Get and print the size of the lists using size()
        System.out.println("Size of emptyList: " + emptyList.size());
        System.out.println("Size of populatedList: " + populatedList.size());
    }
}

我们添加了两行新代码:

  • System.out.println("Size of emptyList: " + emptyList.size());:这行代码调用 emptyListsize() 方法。size() 方法以整数形式返回列表中元素的数量。
  • System.out.println("Size of populatedList: " + populatedList.size());:这行代码对 populatedList 执行相同的操作。

保存 ListCheck.java 文件。

现在,回到 ~/project 目录下的终端。我们需要重新编译修改后的 Java 代码:

javac ListCheck.java

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

java ListCheck

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

Is emptyList empty? true
Is populatedList empty? false
Size of emptyList: 0
Size of populatedList: 2

如你所见,size() 方法正确报告了 emptyList 有 0 个元素,populatedList 有 2 个元素。

虽然你可以通过检查列表的大小是否为 0(list.size() == 0)来判断列表是否为空,但为了代码的清晰性和可读性,通常更推荐使用 isEmpty() 方法。然而,当你需要知道列表中元素的确切数量时,例如在遍历列表或根据元素数量进行计算时,size() 方法就非常重要了。

处理空列表(null 列表)

在前面的步骤中,我们处理的列表要么为空,要么包含元素。然而,在实际编程中,列表变量有可能为 nullnull 引用意味着该变量没有指向内存中的任何对象。尝试对 null 列表调用 isEmpty()size() 等方法会导致 NullPointerException,这是 Java 中常见的错误。

在这一步中,我们将学习如何在尝试检查列表是否为空或获取其大小时,安全地处理 null 列表。

在 WebIDE 编辑器中打开 ListCheck.java 文件。

让我们添加一个新的列表变量并将其设置为 null。然后,我们将演示在不检查 null 的情况下尝试调用其方法会发生什么。修改 main 方法,使其包含以下代码:

import java.util.ArrayList;
import java.util.List;

public class ListCheck {

    public static void main(String[] args) {
        // Create an empty list
        List<String> emptyList = new ArrayList<>();

        // Create a list with elements
        List<String> populatedList = new ArrayList<>();
        populatedList.add("Apple");
        populatedList.add("Banana");

        // Create a null list
        List<String> nullList = null;

        // Check if the lists are empty using isEmpty()
        System.out.println("Is emptyList empty? " + emptyList.isEmpty());
        System.out.println("Is populatedList empty? " + populatedList.isEmpty());

        // Get and print the size of the lists using size()
        System.out.println("Size of emptyList: " + emptyList.size());
        System.out.println("Size of populatedList: " + populatedList.size());

        // --- This part will cause an error if uncommented ---
        // System.out.println("Is nullList empty? " + nullList.isEmpty()); // This line will cause a NullPointerException
        // System.out.println("Size of nullList: " + nullList.size());   // This line will also cause a NullPointerException
        // ----------------------------------------------------

        // Safely check for null before calling methods
        System.out.println("\nSafely checking for null:");
        if (nullList == null) {
            System.out.println("nullList is null.");
        } else {
            System.out.println("Is nullList empty? " + nullList.isEmpty());
            System.out.println("Size of nullList: " + nullList.size());
        }

        if (emptyList == null) {
             System.out.println("emptyList is null.");
        } else {
             System.out.println("Is emptyList empty? " + emptyList.isEmpty());
             System.out.println("Size of emptyList: " + emptyList.size());
        }
    }
}

我们添加了:

  • List<String> nullList = null;:这行代码声明了一个列表变量,但将其值设置为 null
  • 注释掉了会导致 NullPointerException 的代码行。
  • 一个 if 语句:if (nullList == null)。这是处理 null 的关键部分。我们在尝试调用 nullList 的任何方法之前,先检查该变量是否为 null。如果是 null,我们打印一条消息。如果不是 null,我们可以安全地调用 isEmpty()size() 方法。
  • 我们还对 emptyList 进行了类似的检查,以表明 if 条件对于非 null 列表也能正常工作。

保存 ListCheck.java 文件。

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

javac ListCheck.java

运行程序:

java ListCheck

输出应该如下所示:

Is emptyList empty? true
Is populatedList empty? false
Size of emptyList: 0
Size of populatedList: 2

Safely checking for null:
nullList is null.
Is emptyList empty? true
Size of emptyList: 0

注意,我们成功检查了 nullList 是否为 null,并避免了 NullPointerException。我们还确认了该检查对于 emptyList 也能正常工作。

始终要记住,在调用列表(或任何对象引用)的方法之前,先检查其是否可能为 null。这是 Java 中防止 NullPointerException 错误的基本做法。一个常见的模式是 if (myList != null && !myList.isEmpty()),用于在一个条件中检查列表是否不为 null 且不为空。

总结

在本次实验中,我们学习了如何检查 Java 中的列表是否为空。我们首先探索了 isEmpty() 方法,它提供了一种直接且高效的方式来判断列表中是否包含任何元素。我们创建了空列表和包含元素的示例列表,并使用 isEmpty() 方法验证它们的状态,观察布尔类型的输出结果。

我们还研究了如何使用 size() 方法,通过将列表的大小与零进行比较来检查列表是否为空。该方法返回列表中元素的数量,大小为 0 则表示列表为空。最后,我们探讨了在尝试检查列表是否为空之前处理空列表(null 列表)的关键要点,展示了如何通过添加空值检查来避免 NullPointerException