在不要求比较约束的情况下调用Set.contains,可以使用Object类的equals方法进行比较。具体代码示例如下:
public class Main {
public static void main(String[] args) {
Set set = new HashSet<>();
Person p1 = new Person("Alice", 25);
Person p2 = new Person("Bob", 30);
set.add(p1);
System.out.println(set.contains(p2)); // 输出:false
System.out.println(set.contains(new Person("Alice", 25))); // 输出:true
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = 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);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
在上述代码中,我们自定义了一个Person类,并重写了equals方法和hashCode方法。在equals方法中,我们比较了两个Person对象的name和age属性是否相等,如果相等则认为两个对象相等。hashCode方法用于计算对象的哈希码,以便在HashSet中存储和查找对象。
使用HashSet来存储Person对象,然后调用contains方法来判断是否包含某个Person对象。由于重写了equals方法,HashSet能够正确地判断两个Person对象是否相等,即使它们的引用不同。因此,即使不要求比较约束,也能正确地判断Set中是否包含某个对象。