2 回答
TA贡献1813条经验 获得超2个赞
这个就要说一下所谓的散列的概念了。像Set,Map这种东东在判断你的两个对象是否是一样的时候先回去判断你的hashCode方法返回的值是否一致,如果一致再去判断equals方法返回的值。所以,这个地方,你想玩的话,hashCode方法是需要重写的啦,像这种hashCode和equals方法在重写的时候有许多java规约性的东西。这里顺便就说一下散列桶这个东西吧,在Set,Map这种容器里面存放对象数据的时候,这些数据以存在以hashCode为单位的散列桶里面的,hashCode相同的对象就会被放在同一个散列桶里面,在查找的时候会先定位到散列桶,然后再用equals方法去匹配散列桶里面的具体对象。所以,如果你定义的对象需要被存放在这类容器里面的话,hashCode和equals方法的重写就需要好好考虑一下了,不然会非常影响效率的。
TA贡献1858条经验 获得超8个赞
import java.text.DateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class test {
static class Student {
String name;
int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public int hashCode(){
return 1000;
}
public boolean equals(Object o) {
return true;
}
public static void main(String args[]) {
Set set = new HashSet();
Student s1 = new Student("zhangsan", 20);
Student s2 = new Student("lisi", 21);
System.out.println(s1.equals(s2));
set.add(s1);
set.add(s2);
Iterator it = set.iterator();
while (it.hasNext()) {
Student s = (Student) it.next();
System.out.println(s.name);
}
}
}
}
把代码改了一下 这下运行一下你该明白了
运行结果是
true
zhangsan
添加回答
举报