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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄战胜 黑马帝   /  2011-12-28 17:15  /  2095 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

继承了comparable接口的类,具备了比较特性,equals方法也是比较两个对象是否相等,既然两个都可以比较,比较的原理是否一样,分别一什么标准比较呢,一个对象中有一个比较性的方法不久可以了吗,为什么定义了两个呢?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

3 个回复

倒序浏览
举个反例,Map的比较方法,不但需要equals,还需要hashCode()相等。
回复 使用道具 举报
楼主,你还需要对equals的含义认真琢磨下,就说我们定义了一个学生类吧,里面自然的继承了object的equals,如果不复写的话 ,比得就是他们的内存地址是不是一样,如果你想按照学生的年龄对他们排序的时候,你用这个equals 是不是觉得很无力            
所以我们就继承comparable方法!  一下是代码
public int compareTo(Object obj)
        {

                //return 0;
               
                if(!(obj instanceof Student))
                        throw new RuntimeException("不是学生对象");
                Student s = (Student)obj;

                //System.out.println(this.name+"....compareto....."+s.name);
                if(this.age>s.age)
                        return 1;
                if(this.age==s.age)
                {
                        return this.name.compareTo(s.name);
                }
                return -1;
                /**/
        }

这样写了之后,完全可以实现他们的年龄排序了,   equals却不具备这样的功能了。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
这两个方法的作用差远了,equal方法时用来比较两个对象是否相等,当然默认不重写equal方法的话只是比较内存地址而已,没有意义;
而实现comparable接口的作用是为了便于将这个类的不同对象装在一个集合中时进行比较,不是比较是否,而是比较大小;比如,你定义了一个学生类,里面有姓名,年龄,班级,考试成绩这些属性;那么一个集合里如果装有很多个学生类的实例对象,那么如果说你有将这些学生排序的要求,你怎么实现?系统不会自动去帮你排序,再说他也不知道按什么属性排序啊?按年龄,按成绩,按班级?所以这时候你就需要实现comparable接口来定义这个对象在比较时根据什么属性来排序或者比较。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

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