但是一个问题,怎么保证散列函数返回的函数值,对于不同的名字不同?还有,对于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(); } }