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
添加回答
舉報