黑马程序员技术交流社区

标题: equal方法和hashcode [打印本页]

作者: 马胜平    时间: 2012-2-20 11:29
标题: equal方法和hashcode
什么情况下要重写equals和hashcode方法
作者: 邱纲    时间: 2012-2-20 11:33
当你要比较一个类得两个对象是不是相同的时候,就好重写equals方法,当你要把这两个对象当成hashTable的key时就要重写hashcode();方法
作者: 杜明辉    时间: 2012-2-20 11:41
1,一般来说,如果你定义的对象将来要进行比较运算,则要同时覆盖equals和hashCode方法;
2,因为HashSet是一个无序 不重复 的容器,所以在每次往里面存放对象的时候都会比较对象是否相等,因此要覆盖这两个方法
作者: 何招俊    时间: 2012-2-20 11:44
当你要比较一个类得两个对象是不是相同的时候:比如类A 的两个对象 a1和a2,当你要这么写a1.equals(a2);的时候A就要重写equals方法:当你要把这两个对象当成hashTable的key时就要重写hashcode();方法
作者: 唐溪永    时间: 2012-2-20 13:27
由于equals和hashcode方法是祖宗类的Object类的方法,所有类都继承于它,而子类要用父类的方法,要重写,所以equals和hashcode方法在用是都要重写,只要你不是Object类本身。
作者: 陈伟    时间: 2012-2-20 13:45
当你要比较一个类得两个对象是不是相同的时候:比如类A 的两个对象 a1和a2,当你要这么写a1.equals(a2);的时候就要重写equals方法:
当你要把这两个对象当成hashTable的key时就要重写hashcode();方法
作者: 王康    时间: 2012-2-20 14:41
如果你的类是一个基础类,需要比较该类的对象是否相同时必须覆盖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+"]";
        }

}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2