简介
在这个实验中,你将学习如何检查 Java 中的 Set
是否为空。我们将探讨标准的 isEmpty()
方法,这是一种简单而高效的确定集合是否包含任何元素的方法。
你还将学习如何使用 size()
方法验证集合的大小,并了解在处理空集合时如何处理潜在的 NullPointerException
。在本实验结束时,你将能够熟练地在各种场景下检查 Java 集合是否为空。
在这个实验中,你将学习如何检查 Java 中的 Set
是否为空。我们将探讨标准的 isEmpty()
方法,这是一种简单而高效的确定集合是否包含任何元素的方法。
你还将学习如何使用 size()
方法验证集合的大小,并了解在处理空集合时如何处理潜在的 NullPointerException
。在本实验结束时,你将能够熟练地在各种场景下检查 Java 集合是否为空。
isEmpty()
检查集合在这一步中,你将学习如何使用 isEmpty()
方法检查 Java 中的 Set
是否为空。Set
是一种不允许包含重复元素的集合。isEmpty()
方法是一种简单而高效的确定集合是否包含任何元素的方法。
首先,在你的 ~/project
目录下创建一个名为 SetCheck.java
的新 Java 文件。你可以通过在左侧的文件资源管理器中右键单击,选择“新建文件”,然后输入 SetCheck.java
来完成此操作。
在编辑器中打开 SetCheck.java
文件,并添加以下代码:
import java.util.HashSet;
import java.util.Set;
public class SetCheck {
public static void main(String[] args) {
// Create a new HashSet
Set<String> fruits = new HashSet<>();
// Check if the set is empty using isEmpty()
boolean isEmptyBeforeAdd = fruits.isEmpty();
System.out.println("Is the fruits set empty before adding elements? " + isEmptyBeforeAdd);
// Add some elements to the set
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// Check if the set is empty after adding elements
boolean isEmptyAfterAdd = fruits.isEmpty();
System.out.println("Is the fruits set empty after adding elements? " + isEmptyAfterAdd);
}
}
下面来详细分析这段代码的新部分:
import java.util.HashSet;
和 import java.util.Set;
:这两行代码导入了使用 Set
和 HashSet
所需的类。Set<String> fruits = new HashSet<>();
:这行代码创建了一个名为 fruits
的新 HashSet
对象。我们指定 <String>
表示这个集合将存储 String
对象。boolean isEmptyBeforeAdd = fruits.isEmpty();
:这行代码调用 fruits
集合的 isEmpty()
方法,并将结果(true
或 false
)存储在一个名为 isEmptyBeforeAdd
的布尔变量中。fruits.add("Apple");
:这行代码将字符串 "Apple" 添加到 fruits
集合中。boolean isEmptyAfterAdd = fruits.isEmpty();
:这行代码在添加元素后再次检查集合是否为空。保存 SetCheck.java
文件(Ctrl+S 或 Cmd+S)。
现在,来编译这个 Java 程序。打开 WebIDE 底部的终端,并确保你位于 ~/project
目录下。然后,运行以下命令:
javac SetCheck.java
如果编译成功,你将不会看到任何输出。
最后,使用 java
命令运行编译后的程序:
java SetCheck
你应该会看到类似以下的输出:
Is the fruits set empty before adding elements? true
Is the fruits set empty after adding elements? false
这个输出证实了 isEmpty()
方法正确地报告了添加元素前后集合的状态。
size()
验证集合大小在上一步中,你学习了如何使用 isEmpty()
方法检查 Set
是否为空。另一个常见的操作是确定 Set
中包含多少个元素。为此,我们使用 size()
方法。size()
方法会返回集合中当前元素的数量。
在 WebIDE 编辑器中打开 ~/project
目录下的 SetCheck.java
文件。
修改 main
方法,使其包含对 size()
方法的调用。将现有的 main
方法替换为以下代码:
import java.util.HashSet;
import java.util.Set;
public class SetCheck {
public static void main(String[] args) {
// Create a new HashSet
Set<String> fruits = new HashSet<>();
// Check the size of the set before adding elements
int sizeBeforeAdd = fruits.size();
System.out.println("Size of the fruits set before adding elements: " + sizeBeforeAdd);
// Add some elements to the set
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// Check the size of the set after adding elements
int sizeAfterAdd = fruits.size();
System.out.println("Size of the fruits set after adding elements: " + sizeAfterAdd);
// Add a duplicate element (Sets do not allow duplicates)
fruits.add("Apple");
// Check the size again
int sizeAfterDuplicateAdd = fruits.size();
System.out.println("Size of the fruits set after adding a duplicate: " + sizeAfterDuplicateAdd);
}
}
下面是新增的代码说明:
int sizeBeforeAdd = fruits.size();
:这行代码调用 fruits
集合的 size()
方法,并将返回的整数值(元素数量)存储在名为 sizeBeforeAdd
的变量中。int sizeAfterAdd = fruits.size();
:这行代码在添加初始的三个元素后检查集合的大小。fruits.add("Apple");
:我们尝试再次添加 "Apple"。由于 "Apple" 已经在集合中,此操作不会改变集合的内容。int sizeAfterDuplicateAdd = fruits.size();
:这行代码在尝试添加重复元素后检查集合的大小。保存 SetCheck.java
文件。
在终端中编译修改后的 Java 程序:
javac SetCheck.java
同样,没有输出表示编译成功。
运行程序:
java SetCheck
你应该会看到类似以下的输出:
Size of the fruits set before adding elements: 0
Size of the fruits set after adding elements: 3
Size of the fruits set after adding a duplicate: 3
这个输出表明 size()
方法正确地报告了元素的数量,并且添加重复元素不会增加集合的大小。
在前面的步骤中,我们处理的 Set
都是经过正确初始化的。然而,在实际编程中,你可能会遇到 Set
变量为 null
的情况。尝试对 null
对象调用 isEmpty()
或 size()
等方法会导致 NullPointerException
,这是 Java 中常见的错误。妥善处理这些情况非常重要。
在 WebIDE 编辑器中打开 ~/project
目录下的 SetCheck.java
文件。
修改 main
方法,演示如何处理 null
集合。将现有的 main
方法替换为以下代码:
import java.util.HashSet;
import java.util.Set;
public class SetCheck {
public static void main(String[] args) {
// Declare a Set variable but initialize it to null
Set<String> colors = null;
// Attempting to call isEmpty() or size() here would cause a NullPointerException
// System.out.println("Is the colors set empty? " + colors.isEmpty()); // This would crash!
// To safely check if a set is null or empty, we first check for null
if (colors == null) {
System.out.println("The colors set is null.");
} else {
// If it's not null, we can safely check if it's empty
if (colors.isEmpty()) {
System.out.println("The colors set is empty.");
} else {
System.out.println("The colors set is not empty and has " + colors.size() + " elements.");
}
}
// Now, let's initialize the set and add elements
colors = new HashSet<>();
colors.add("Red");
colors.add("Blue");
// Check again after initialization and adding elements
if (colors == null) {
System.out.println("The colors set is null.");
} else {
if (colors.isEmpty()) {
System.out.println("The colors set is empty.");
} else {
System.out.println("The colors set is not empty and has " + colors.size() + " elements.");
}
}
}
}
在这段更新后的代码中:
Set<String> colors = null;
:我们声明了一个 Set
变量 colors
,并将其显式设置为 null
。NullPointerException
的代码行。if (colors == null)
:这是关键的检查。在对 colors
变量调用任何方法之前,我们首先检查它是否为 null
。colors
不为 null
,我们再使用 colors.isEmpty()
检查它是否为空,或使用 colors.size()
获取其大小。HashSet
初始化 colors
并添加元素,以展示当集合不为 null
且不为空时的不同输出。保存 SetCheck.java
文件。
在终端中编译程序:
javac SetCheck.java
运行程序:
java SetCheck
你应该会看到类似以下的输出:
The colors set is null.
The colors set is not empty and has 2 elements.
这展示了在尝试访问 Set
变量的方法之前,如何安全地处理可能的 null
值。在处理可能未初始化的对象引用时,始终要先检查是否为 null
。
在本次实验中,你学习了如何检查 Java 中的 Set
是否为空。你首先使用了 isEmpty()
方法,这是执行此检查的标准且最有效的方式。你创建了一个 HashSet
,在添加元素前后检查了它的空状态,并观察了 isEmpty()
方法返回的布尔值输出。这展示了使用 isEmpty()
方法判断集合是否包含任何元素的基本用法。