import java.util.HashSet;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
HashSet set = new HashSet();
set.add(new A());
set.add(new A());
set.add(new B());
set.add(new B());
set.add(new C());
set.add(new C());
System.out.println(set);
in.close();
}
}
class A{
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return true;
}
}
class B{
@Override
public int hashCode() {
// TODO Auto-generated method stub
return 1;
}
}
class C{
@Override
public int hashCode() {
// TODO Auto-generated method stub
return 2;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return true;
}
}
输出结果:
因为C类 重写了equals方法和hashCode, 导致HashSet 将两个对象判成了相同元素
[B@1, B@1, C@2, A@7d4991ad, A@4aa298b7]
本文探讨了在Java中,当类C重写equals()和hashCode()方法后,如何影响HashSet判断两个对象是否相等的问题。通过示例代码展示了HashSet如何将重写方法的对象视为相同的元素。
171万+

被折叠的 条评论
为什么被折叠?



