Java的List是一个非常常用的数据结构,它提供了一系列操作来方便我们对列表元素的增删改查。其中一个重要的操作就是`contains()`方法,这个方法用于判断一个列表是否包含某个特定元素。本篇文章将详细阐述Java List Contains方法的使用实例。
一、判断列表是否包含某个元素
对于一个List列表,我们可以使用`contains()`方法来判断是否包含某个元素。下面是一个示例代码:
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("Ruby");
boolean containsJava = list.contains("Java");
boolean containsCsharp = list.contains("C#");
System.out.println("Does list contain Java? " + containsJava); // Does list contain Java? true
System.out.println("Does list contain C#? " + containsCsharp); // Does list contain C#? false
上面展示的代码创建了一个字符串类型的List,然后使用`add()`方法往列表中添加了三个元素。接着调用`contains()`方法分别判断了列表中是否包含字符串"Java"和"C#",并打印出结果。我们可以看到,在上面的代码执行过程中,方法`contains()`返回true代表该列表中存在该元素,否则返回false。
二、判断复杂类型元素是否在列表中
在Java中,列表中的元素类型可以是复杂类型数据,如类、对象等等。那么如果我们想判断列表中是否包含某个复杂类型的元素,应该怎么做呢?下面是一个示例。
class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
List<Person> personList = new ArrayList<>();
personList.add(new Person("张三"));
personList.add(new Person("李四"));
boolean contains张三 = personList.contains(new Person("张三"));
System.out.println("Does personList contain 张三? " + contains张三); // Does personList contain 张三? true
上面的代码中,我们声明了一个Person类,并创建了一个名为"personList"的Person类型的List列表,分别添加了"张三"和"李四"两个元素。然后我们调用`contains()`方法来判断是否包含一个名为"张三"的对象,结果返回了true。 需要注意的是,我们判断列表中是否包含某个元素时,要判断的元素对象是否与列表中的元素对象内的属性值完全相同,而不是简单地比较引用。
三、自定义类的Contains方法
在Java中,自定义的类可以重写`equals()`方法来实现对象比较。那么对于自定义类,我们如何才能让`contains()`方法正确地判断元素是否在列表中呢?我们可以自定义一个类的`contains()`方法,来实现我们的判断逻辑。下面是一个示例:
class Fruit {
private String name;
public Fruit(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override // 重写equals方法
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (obj.getClass() != getClass()) {
return false;
}
Fruit other = (Fruit) obj;
return this.name.equals(other.name);
}
}
class Basket {
private List<Fruit> fruits = new ArrayList<>();
public void add(Fruit fruit) {
fruits.add(fruit);
}
public boolean contains(Fruit fruit) {
for (Fruit f : fruits) {
if(f.equals(fruit)) {
return true;
}
}
return false;
}
}
Basket basket = new Basket();
basket.add(new Fruit("apple"));
basket.add(new Fruit("banana"));
basket.add(new Fruit("orange"));
boolean containsApple = basket.contains(new Fruit("apple"));
System.out.println("Does basket contain apple? " + containsApple); // Does basket contain apple? true
上面的代码中,我们自定义了一个`Fruit`类,它包含一个`name`属性,然后创建了一个`Basket`类,其中含有一个Fruit类型的List列表。我们重写了`Fruit`类的`equals()`方法来判断两个Fruit对象是否相等。此时,我们可以调用Basket类的`contains()`方法来判断某个Fruit对象是否在列表中,方法中实现了对Fruit对象的比较,若其中有一个对象被判定为相等,则返回true。
四、使用Lambda表达式来判断是否包含某元素
从JDK8开始,我们可以在List上使用Lambda表达式来完成条件筛选,下面是一个简单的Lambda表达式实例:
List<String> list = Arrays.asList("Java", "Python", "Ruby");
boolean containsJava = list.stream().anyMatch(e -> e.equals("Java"));
System.out.println("Does list contain Java? " + containsJava); // Does list contain Java? true
上面的代码中,我们将字符串类型的List列表转换为了一个流,然后使用`anyMatch()`方法和Lambda表达式来判断该流是否包含字符串"Java"。
五、小结
在本篇文章中,我们详细阐述了Java List Contains方法的使用实例。我们首先介绍了如何判断列表是否包含某个元素,接着详细讲解了当元素是复杂类型数据时,如何判断元素是否在列表中。我们还展示了如何使用自定义的类的`contains()`方法来实现判断元素是否在列表中,以及如何使用Lambda表达式来完成条件判断。相信通过本篇文章的讲解,读者已经掌握了Java List Contains方法的使用方法。