```package Class_3;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Objects;
class R{
public int age;
public R(int age) {
this.age = age;
}
public String toString() {
return "R[age:" + age + "]";
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
R r = (R) o;
return age == r.age;
}
@Override
public int hashCode() {
return Objects.hash(age);
}
}
public class Test {
public static void main(String[] args) {
HashSet<R> hs = new HashSet<R>();
hs.add(new R(5)); //001
hs.add(new R(-3)); //002
hs.add(new R(9));
hs.add(new R(-2));
System.out.println(hs);
Iterator<R> it = hs.iterator();
R first = (R)it.next();
first.age = -4;
System.out.println(hs);
//hs.remove(new R(-3)); //003
//System.out.println(hs);
System.out.println("hs是否包含age为-4的R对象?" + hs.contains(new R(-4)));
System.out.println("hs是否包含age为-2的R对象?" + hs.contains(new R(-2)));
hs.remove(new R(-2));
}
}
return Objects.hash(age);
->
return age;
hs.contains(new R(-4))为什么会是false,是因为first和new R(-4)两个引用的对象不一样,it变量获取的是实际是new R(5)对象,参考如下代码debug截图: