ArrayList的contains方法在判断元素是否存在时,是通过调用元素的equals方法来进行比较的。然而,如果我们没有重写equals方法,那么默认情况下,它只是使用了Object类的equals方法,即比较的是对象的引用是否相等。
因此,如果我们希望contains方法能够按照我们期望的方式来判断元素是否存在,我们需要重写元素的equals方法,并根据实际需求定义比较的逻辑。
以下是一个示例代码,演示了如何重写equals方法来实现自定义的比较逻辑:
class Person {
private String name;
private int age;
// 构造函数和其他方法省略
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
}
public class Main {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add(new Person("Alice", 20));
list.add(new Person("Bob", 25));
Person person = new Person("Alice", 20);
System.out.println(list.contains(person)); // 输出 true
}
}
在上面的示例中,我们重写了Person类的equals方法,根据name和age两个属性来判断两个对象是否相等。这样,当我们使用contains方法时,它就能按照我们自定义的逻辑来判断元素是否存在了。