现在的位置: 首页 > 综合 > 正文

库谜题之57名字问题(equals和hashcode)(考虑散列函数的问题)

2013年03月06日 ⁄ 综合 ⁄ 共 693字 ⁄ 字号 评论关闭
但是一个问题,怎么保证散列函数返回的函数值,对于不同的名字不同?还有,对于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();
    }


}

抱歉!评论已关闭.