x86timesxx 2011-01-15 22:41
浏览 255
已采纳

谁能给我讲讲 equals 和 hashcode 的关系和应用

[color=red][size=xx-large]当需要判断两个对象相等时候,一直听到说 ,有的时候要重写equals的同时要重写 hashcode方法,看不懂,求高人教教我,谢谢,最好有例子,越具体越好[/size][/color]

  • 写回答

2条回答 默认 最新

  • 会飞的五花肉 2011-01-17 14:50
    关注

    一个例子,,看下吧。。如果屏蔽public int hashCode()方法,,比较下。结果。

    [code="java"]
    package Cs;

    import java.util.HashMap;
    import java.util.Map;

    public class Test2 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Map map=new HashMap();
        map.put(new PhoneNumber(020,1234567),"xx");
        System.out.println(map.get(new PhoneNumber(020,1234567)));
    }
    
    private static class PhoneNumber{
        /**
         * @param areaCode
         * @param extension
         */
        public PhoneNumber(int areaCode, int extension) {
            this.areaCode =(short) areaCode;
            this.extension = (short)extension;
        }
    
        private short areaCode;
        private short extension;
    
        public boolean equals(Object o){
            if(o==this){
                return true;
            }
            if(!(o instanceof PhoneNumber)){
                return false;
            }
        PhoneNumber pn=(PhoneNumber)o;
        return pn.extension==extension && pn.areaCode==areaCode;
        }
        //result就是我们得到的散列值,,计算过程有多种,这里只是个例子
        public int hashCode(){
            int result=17;
            result=37*result+areaCode;
            result=37*result+extension;
            return result;
        }
    
    }
    

    }
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器