一、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,才能在实际开发中取得更好的效果。
原创文章,作者:FWDB,如若转载,请注明出处:https://www.506064.com/n/140757.html
微信扫一扫
支付宝扫一扫