A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马胜平 中级黑马   /  2012-2-20 11:29  /  2449 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么情况下要重写equals和hashcode方法

6 个回复

倒序浏览
当你要比较一个类得两个对象是不是相同的时候,就好重写equals方法,当你要把这两个对象当成hashTable的key时就要重写hashcode();方法
回复 使用道具 举报
1,一般来说,如果你定义的对象将来要进行比较运算,则要同时覆盖equals和hashCode方法;
2,因为HashSet是一个无序 不重复 的容器,所以在每次往里面存放对象的时候都会比较对象是否相等,因此要覆盖这两个方法
回复 使用道具 举报
当你要比较一个类得两个对象是不是相同的时候:比如类A 的两个对象 a1和a2,当你要这么写a1.equals(a2);的时候A就要重写equals方法:当你要把这两个对象当成hashTable的key时就要重写hashcode();方法
回复 使用道具 举报
由于equals和hashcode方法是祖宗类的Object类的方法,所有类都继承于它,而子类要用父类的方法,要重写,所以equals和hashcode方法在用是都要重写,只要你不是Object类本身。
回复 使用道具 举报
当你要比较一个类得两个对象是不是相同的时候:比如类A 的两个对象 a1和a2,当你要这么写a1.equals(a2);的时候就要重写equals方法:
当你要把这两个对象当成hashTable的key时就要重写hashcode();方法
回复 使用道具 举报
王康 黑马帝 2012-2-20 14:41:13
7#
如果你的类是一个基础类,需要比较该类的对象是否相同时必须覆盖equals和hashcode方法

package com.io;

/**
* 学生类
* @author 黑马_王康
*
*/
public class Student implements Comparable<Student>{
        private String name;
       
        private int mt,cn,en;
       
        private int sum;
       
        Student( String name,int mt,int cn,int en){
                this.name = name;
                this.mt = mt;
                this.cn = cn;
                this.en = en;
                sum = mt + cn + en;
        }
       
        public String getName(){
                return name;
        }
       
        public int getSum(){
                return sum;
        }
       
        public int getEn(){
                return en;
        }
       
        public int getCn(){
                return cn;
        }
       
        @Override
        public int compareTo(Student stu) {        //实现compareTo方法
                int num = new Integer(this.sum).compareTo(new Integer(stu.sum));
                if(num == 0){
                        return this.name.compareTo(stu.name);
                }
                return num;
        }
       
        public int hashCode(){        //覆盖hashCode方法
                return name.hashCode()+sum*66;
        }
       
        public boolean equals(Object obj){        //覆盖equals方法
                if(!(obj instanceof Student))
                        throw new ClassCastException("类型不匹配");
                Student stu = (Student)obj;
                return this.name.equals(stu.name)&&this.sum==stu.sum;
               
        }
       
        public String toString(){        //重写toString方法
                return "student["+name+","+mt+","+cn+","+en+"]";
        }

}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马