如何在 Java 中检查集合是否包含特定元素

JavaJavaBeginner
立即练习

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

简介

在本次实验中,你将学习如何在 Java 中检查集合内是否存在特定元素。我们将重点介绍所有集合类型都可用的 contains() 方法。你将练习对不同类型的元素使用 contains() 方法,并学习如何处理空元素。完成本次实验后,你将能够熟练判断 Java 集合中是否存在元素。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/encapsulation("Encapsulation") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/arraylist("ArrayList") java/SystemandDataProcessingGroup -.-> java/object_methods("Object Methods") subgraph Lab Skills java/collections_methods -.-> lab-559973{{"如何在 Java 中检查集合是否包含特定元素"}} java/encapsulation -.-> lab-559973{{"如何在 Java 中检查集合是否包含特定元素"}} java/arraylist -.-> lab-559973{{"如何在 Java 中检查集合是否包含特定元素"}} java/object_methods -.-> lab-559973{{"如何在 Java 中检查集合是否包含特定元素"}} end

使用 contains() 方法检查元素

在这一步中,我们将探讨如何在 Java 中检查集合内是否存在特定元素。集合是一种基本的数据结构,用于将多个元素组合成一个单元。Java 提供了各种类型的集合,如列表(List)、集合(Set)和映射(Map)。

在处理集合时,一个常见的任务是判断某个特定元素是否存在。Java 的 Collection 接口是所有集合类型的根接口,它为此提供了一个便捷的方法:contains()

contains() 方法接受一个参数,即你要检查的元素,并返回一个布尔值:如果在集合中找到该元素,则返回 true;否则返回 false

让我们创建一个简单的 Java 程序,演示如何对 ArrayList(一种常见的列表类型)使用 contains() 方法。

  1. 如果 HelloJava.java 文件尚未在 WebIDE 编辑器中打开,请打开它。

  2. 将文件的全部内容替换为以下代码:

    import java.util.ArrayList;
    import java.util.List;
    
    public class HelloJava {
        public static void main(String[] args) {
            // Create a List of strings
            List<String> fruits = new ArrayList<>();
    
            // Add some fruits to the list
            fruits.add("Apple");
            fruits.add("Banana");
            fruits.add("Orange");
            fruits.add("Mango");
    
            // Check if the list contains "Banana"
            boolean hasBanana = fruits.contains("Banana");
            System.out.println("Does the list contain Banana? " + hasBanana);
    
            // Check if the list contains "Grape"
            boolean hasGrape = fruits.contains("Grape");
            System.out.println("Does the list contain Grape? " + hasGrape);
        }
    }

    让我们来分析一下这段新代码:

    • import java.util.ArrayList;import java.util.List;:这两行代码导入了处理列表(List)和 ArrayList 所需的类。
    • List<String> fruits = new ArrayList<>();:这行代码创建了一个新的 ArrayList,它可以存储 String 对象,并将其赋值给名为 fruits 的变量。
    • fruits.add("Apple"); 及类似的行:这些行将元素(表示水果名称的字符串)添加到我们的 fruits 列表中。
    • boolean hasBanana = fruits.contains("Banana");:这行代码调用 fruits 列表的 contains() 方法,检查字符串 "Banana" 是否存在。结果(truefalse)存储在布尔变量 hasBanana 中。
    • System.out.println("Does the list contain Banana? " + hasBanana);:这行代码打印出对 "Banana" 的检查结果。
    • boolean hasGrape = fruits.contains("Grape"); 及后续的 println 语句:这些行对 "Grape" 进行同样的检查,而 "Grape" 不在我们的列表中。
  3. 保存文件(Ctrl+S 或 Cmd+S)。

  4. 在终端中编译修改后的程序:

    javac HelloJava.java
  5. 运行编译后的程序:

    java HelloJava

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

    Does the list contain Banana? true
    Does the list contain Grape? false

这个输出证实了 contains() 方法正确识别出 "Banana" 在列表中,而 "Grape" 不在列表中。

理解如何检查元素是否存在是在 Java 中处理集合时的一项基本技能。在接下来的步骤中,我们将进一步探讨 contains() 方法的更多方面,以及它在不同场景下的表现。

使用不同类型的元素进行测试

在上一步中,我们对存储 String 对象的 List 使用了 contains() 方法。contains() 方法非常通用,可以用于存储不同类型元素的集合,例如数字、自定义对象,甚至其他集合。

使用 contains() 方法时,Java 会依赖集合中对象的 equals() 方法来判断要查找的元素是否匹配。对于基本数据类型(如 intdoubleboolean),会使用它们对应的包装类(IntegerDoubleBoolean),这些包装类的 equals() 方法会比较值。对于对象,默认的 equals() 方法会检查两个对象引用是否指向同一个内存位置。不过,许多类(如 StringInteger 等)会重写 equals() 方法,以比较对象的实际内容或值。

让我们修改程序,使其处理存储 Integer 对象的 List,看看 contains() 方法的表现。

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

  2. 将当前代码替换为以下代码:

    import java.util.ArrayList;
    import java.util.List;
    
    public class HelloJava {
        public static void main(String[] args) {
            // Create a List of integers
            List<Integer> numbers = new ArrayList<>();
    
            // Add some numbers to the list
            numbers.add(10);
            numbers.add(25);
            numbers.add(5);
            numbers.add(50);
    
            // Check if the list contains 25
            boolean hasTwentyFive = numbers.contains(25);
            System.out.println("Does the list contain 25? " + hasTwentyFive);
    
            // Check if the list contains 100
            boolean hasOneHundred = numbers.contains(100);
            System.out.println("Does the list contain 100? " + hasOneHundred);
    
            // Check if the list contains the Integer object with value 5
            boolean hasFiveObject = numbers.contains(Integer.valueOf(5));
            System.out.println("Does the list contain Integer object with value 5? " + hasFiveObject);
        }
    }

    在这段代码中:

    • 我们创建了一个专门存储 Integer 对象的 ListList<Integer> numbers = new ArrayList<>();
    • 我们使用 numbers.add() 方法向列表中添加整数值。Java 会自动将基本数据类型 int 的值(10、25、5、50)转换为 Integer 对象(这称为自动装箱)。
    • 我们使用 numbers.contains(25)numbers.contains(100) 来检查整数值是否存在。同样,Java 会在执行检查之前将基本数据类型 int 的值 25 和 100 自动装箱为 Integer 对象。
    • 我们还使用 Integer.valueOf(5) 显式创建了一个 Integer 对象,并检查列表中是否包含这个特定的对象。
  3. 保存文件。

  4. 在终端中编译程序:

    javac HelloJava.java
  5. 运行程序:

    java HelloJava

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

    Does the list contain 25? true
    Does the list contain 100? false
    Does the list contain Integer object with value 5? true

这表明 contains() 方法可以正确处理 Integer 对象,并比较它们的值。contains() 方法实际上使用了集合中元素和要查找元素的 equals() 方法。

在下一步中,我们将探讨一个特殊情况:使用 contains() 方法处理 null 元素。

处理 null 元素

在 Java 中,集合有时可能包含 null 元素。了解 contains() 方法在处理 null 元素时的行为非常重要。

好消息是,contains() 方法被设计为能够优雅地处理 null 元素。如果集合中包含 null,调用 contains(null) 会返回 true;如果集合中不包含 null,则返回 false。这与 equals() 方法通常对 null 的处理方式一致(任何对象的 equals(null) 应该返回 false,但如果集合的 contains 实现没有在内部处理,null.equals(anyObject) 会抛出 NullPointerException)。

让我们修改程序,以包含并检查 null 元素。

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

  2. 将当前代码替换为以下代码:

    import java.util.ArrayList;
    import java.util.List;
    
    public class HelloJava {
        public static void main(String[] args) {
            // Create a List that can contain null
            List<String> mixedList = new ArrayList<>();
    
            // Add some elements, including null
            mixedList.add("First");
            mixedList.add(null); // Adding a null element
            mixedList.add("Second");
            mixedList.add(null); // Adding another null element
            mixedList.add("Third");
    
            // Check if the list contains null
            boolean hasNull = mixedList.contains(null);
            System.out.println("Does the list contain null? " + hasNull);
    
            // Check if the list contains a non-existent element
            boolean hasFourth = mixedList.contains("Fourth");
            System.out.println("Does the list contain Fourth? " + hasFourth);
    
            // Check if the list contains "First"
            boolean hasFirst = mixedList.contains("First");
            System.out.println("Does the list contain First? " + hasFirst);
        }
    }

    在这段代码中:

    • 我们创建了一个名为 mixedListList
    • 我们添加了一些 String 元素,还使用 mixedList.add(null); 显式添加了 null
    • 然后,我们使用 mixedList.contains(null) 来检查列表中是否包含 null 值。
    • 我们还对一个不存在的字符串("Fourth")和一个存在的字符串("First")进行了检查,以便与对 null 的检查结果进行对比。
  3. 保存文件。

  4. 在终端中编译程序:

    javac HelloJava.java
  5. 运行程序:

    java HelloJava

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

    Does the list contain null? true
    Does the list contain Fourth? false
    Does the list contain First? true

这个输出证实了 contains() 方法能够正确识别列表中 null 元素的存在。需要注意的是,集合可能包含 null(具体取决于集合的类型和使用方式),而 contains() 方法为检查 null 元素提供了可靠的方式。

你现在已经学会了如何使用 contains() 方法来检查 Java 集合中的元素,包括不同的数据类型以及 null 这种特殊情况。这在你的 Java 程序中处理集合时是一个非常有用的工具。

总结

在本次实验中,我们学习了如何在 Java 中使用 contains() 方法来检查集合是否包含特定元素。我们了解到,通过 Collection 接口提供的这个方法会返回一个布尔值,用于指示元素是否存在。我们通过 ArrayList 演示了该方法的使用,并观察到它能正确识别存在和不存在的元素。

我们还探讨了 contains() 方法如何处理不同的数据类型,以及如何处理集合中的 null 元素。通过这次实践,你对处理 Java 集合时的这一基本操作有了更实际的理解。