equals方法
在使用List<E>泛型对象的contains或者indexOf方法来查找元素时,实际循环查找的时候使用的是元素的equals方法进行比较,所以当List中元素为自定义类型时,需要对其覆写equals方法。
编写equals
equals()方法的编写:
- 先确定实例“相等”的逻辑,即哪些字段相等,就认为实例相等;
- 用instanceof判断传入的待比较的Object是不是当前类型,如果是,继续比较,否则,返回false;
- 对引用类型用Objects.equals()比较,对基本类型直接用==比较。
比如下面,我们实现了Person类的equals方法用以以其为泛型类型组成的List使用contains或者indexOf方法判断元素是否存在:
import java.util.List;
import java.util.Objects;
public class Main {
public static void main(String[] args) {
List<Person> list = List.of(
new Person("Xiao", "Ming", 18),
new Person("Xiao", "Hong", 25),
new Person("Bob", "Smith", 20)
);
boolean exist = list.contains(new Person("Bob", "Smith", 20));
System.out.println(exist ? "测试成功!" : "测试失败!");
}
}
class Person {
String firstName;
String lastName;
int age;
public Person(String firstName, String lastName, int age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person person)) return false;
return age == person.age && Objects.equals(firstName, person.firstName) && Objects.equals(lastName, person.lastName);
}
}