您的位置:

如何使用List的contains方法判断元素是否存在

一、List和contains方法介绍

List是Java中的一个接口,用于存储有序的元素集合。它有许多不同的实现方式,如ArrayList、LinkedList等。其中,ArrayList是最常用的一种实现方式,它是一个基于动态数组的实现。

contains方法是List接口提供的一个用于判断元素是否存在的方法。它接收一个参数,表示需要判断的元素,返回一个布尔值,表示列表是否包含这个元素。

二、使用List的contains方法判断元素是否存在

在使用List的contains方法时,我们需要先创建一个List对象,并向其中添加一些元素。下面的代码演示了如何使用List的contains方法判断元素是否存在:

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

public class ListContainsDemo {
    public static void main(String[] args) {
        List list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("cherry");
        boolean containsBanana = list.contains("banana");
        System.out.println("List contains \"banana\": " + containsBanana);
        boolean containsDurian = list.contains("durian");
        System.out.println("List contains \"durian\": " + containsDurian);
    }
}

  
上面的代码首先创建了一个ArrayList,并向其中添加了三个水果。然后使用contains方法判断了列表中是否包含了“banana”和“durian”两个元素。程序输出如下: List contains "banana": true List contains "durian": false 可以看到,contains方法返回了正确的结果。在实际开发中,我们经常需要使用contains方法来判断某个元素是否存在于列表中。

三、List和equals方法的注意事项

在使用List的contains方法时,有一些需要注意的地方。首先是List和equals方法的关系。equals方法用于比较两个对象是否相等,当我们向List中添加自定义对象时,需要确保自定义对象的equals方法被正确地重写,否则List的contains方法可能无法正常工作。

例如,我们有一个Student类表示学生信息,其中包含学号和姓名两个属性:

public class Student {
    private String id;
    private String name;

    public Student(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
现在,我们需要使用List的contains方法判断是否包含学号为“1001”的学生。我们先创建一个List对象,并向其中添加三个学生:
List students = new ArrayList<>();
students.add(new Student("1001", "张三"));
students.add(new Student("1002", "李四"));
students.add(new Student("1003", "王五"));

  
接着,我们使用如下代码判断学号为“1001”的学生是否在列表中:
Student student = new Student("1001", "张三");
boolean containsStudent = students.contains(student);
System.out.println("List contains \"1001\": " + containsStudent);
运行上述代码,发现结果为false,这是因为我们没有重写Student类的equals方法,List的contains方法默认使用的是Object类的equals方法,而这个方法比较的是两个对象的内存地址。因此,为了使List的contains方法能够正确判断元素是否存在,我们需要在Student类中重写equals方法,比较的是学生的学号这一个属性:
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null || getClass() != obj.getClass()) {
        return false;
    }
    Student student = (Student) obj;
    return Objects.equals(id, student.id);
}
现在,我们再次运行上述代码,结果为true,说明我们已经成功地判断了学号为“1001”的学生是否在列表中。

四、List和null值的注意事项

在使用List的contains方法时,还需要注意列表中是否包含null值。默认情况下,List是允许包含null值的,但是在调用contains方法时,需要注意这个问题。

例如,我们有一个包含null值的列表:

List list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add(null);
list.add("cherry");

  
现在,我们需要使用List的contains方法判断是否包含null值。我们可以先对null值进行特判:
if (list.contains(null)) {
    System.out.println("List contains null");
} else {
    System.out.println("List does not contain null");
}
但是,如果我们误将null值当作列表中的一个元素,那么我们其实是在判断这两个对象是否相等。我们可以通过如下代码判断null值是否在列表中:
boolean containsNull = list.stream().anyMatch(Objects::isNull);
System.out.println("List contains null: " + containsNull);
另外,如果我们向列表中添加了若干个null值,调用contains方法时,只会返回第一个null的索引位置,而不是最后一个null的位置。要查找最后一个null,可以使用如下代码:
int lastIndex = list.lastIndexOf(null);
System.out.println("Last index of null: " + lastIndex);

五、List和containsAll方法的注意事项

除了contains方法,List还提供了containsAll方法,用于判断一个列表是否包含另一个列表中所有的元素。

例如,我们有一个列表movies,存储了多部电影的名字:

List movies = new ArrayList<>();
movies.add("The Godfather");
movies.add("The Shawshank Redemption");
movies.add("The Dark Knight");
movies.add("The Lord of the Rings");

  
现在,我们有一个列表watched,存储了用户看过的电影名字:

List watched = new ArrayList<>();
watched.add("The Godfather");
watched.add("The Shawshank Redemption");

  
我们要判断用户是否看过所有的电影,可以使用如下代码:
boolean containsAll = movies.containsAll(watched);
System.out.println("User has watched all movies: " + containsAll);
如果用户看过所有的电影,程序输出true,否则输出false。注意,containsAll方法比较的是两个列表中的对象是否相等,因此在使用时需要确保对象的equals方法已被正确地重写。

六、总结

List的contains方法是一个非常常用的方法,可用于判断一个元素是否存在于列表中。在使用contains方法时,需要注意List和equals方法、null值以及containsAll方法等问题。只有正确地使用这些API,才能在实际开发中取得更好的效果。