但是一个问题,怎么保证散列函数返回的函数值,对于不同的名字不同?还有,对于eauqls方法重写的时候,要注意它的参数类型一定要是Object。
package LibPuzzles;
import java.util.HashSet;
import java.util.Set;
/**
* 无论何时,只要重写了equals方法,就要重写hashCode方法。
* @author xixizhao
*
*/
public class Name {
private String first, last;
public Name(String first, String last) {
this.first = first;
this.last = last;
}
public boolean equals(Object o) {
if (!(o instanceof Name))
return false;
Name n = (Name)o;
return n.first.equals(first) && n.last.equals(last);
}
public static void main(String[] args) {
Set s = new HashSet();
s.add(new Name("Mickey", "Mouse"));
System.out.println(
s.contains(new Name("Mickey", "Mouse")));
}
//上面的 程序返回的肯定是false,要重写一个hashcode方法,散列函数应该尝试着对不同的名字返回不同的散列值。
public int hashCode() {
return 37 * first.hashCode() + last.hashCode();
}
}