本帖最后由 张文彬 于 2013-2-25 14:52 编辑
其实这是根据HashSet的取值规律的,实际上当程序向HashSet集合中添加元素时,HashSet会根据该元素的hashCode值来计算他的存储位置,也就是说,每个元素的hashCode值就可以决定他的存储“索引”(HashSet本身没有索引)- //类A的equals方法总是返回true,但没有重写其hashCode()方法
- class A
- {
- public boolean equals(Object obj)
- {
- return true;
- }
- }
- //类B的hashCode()方法总是返回2,且有重写其equals()方法
- class B
- {
- public int hashCode()
- {
- return 2;
- }
- public boolean equals(Object obj)
- {
- return true;
- }
- }
- public class HashSetTest
- {
- public static void main(String[] args)
- {
- HashSet books = new HashSet();
- //分别向books集合中添加两个A对象,两个B对象
- books.add(new A());
- books.add(new A());
- books.add(new B());
- books.add(new B());
- System.out.println(books);
- }
- }
复制代码 结果
这个例子就可以说明即使A对象通过equals()方法比较返回true,但HashSet依然把它们当成两个对象。
也就是说两个方法必须都重写。
|