黑马程序员技术交流社区

标题: 关于集合中compareTo()方法的问题 [打印本页]

作者: 逍遥才子121    时间: 2015-5-5 09:29
标题: 关于集合中compareTo()方法的问题
class Student implements Comparable<Student>
{
        private String name;
        private int age;
        Student(String name,String age)
        {
                this.name = name;
                this.age = age;
        }
        public int compareTo(Student s)//问题假如我新建一个Student("zhangsan","20")对象,那this.name不就是zhangsan了么
                                                                        //        那这里这个比较为何会拿以前的所有name都比一次?
        {
                int num = new Integer(this.age).compareTo(new Integer(s.age));
                if (num==0)
                        return this.name.compareTo(s.name);
                return num;
               
        }。。。。。。


作者: CoeusLYJ    时间: 2015-5-5 09:29
当使用HashSet 集合时,会自动调用 hashcode()方法和compareTo()方法,因为HashSet集合不允许存储重复的元素。
而当使用TreeSet集合时,要么采用自然排序方式(实现Comparable接口),要么采用自定义排序(构造比较器)
所以在使用这两种集合情况下,会不断重复将新添加的元素和原有的元素进行比较
作者: 逍遥才子121    时间: 2015-5-5 10:19
CoeusLYJ 发表于 2015-5-5 09:41
当使用HashSet 集合时,会自动调用 hashcode()方法和compareTo()方法,因为HashSet集合不允许存储重复的元 ...

意思是集合自动会调用hashCode方法把所有元素都拿过来,和传进去的元素都比较一下是不是?
作者: CoeusLYJ    时间: 2015-5-5 10:39
逍遥才子121 发表于 2015-5-5 10:19
意思是集合自动会调用hashCode方法把所有元素都拿过来,和传进去的元素都比较一下是不是? ...

bingo~~~ 先调用hashcode()方法对元素的哈希值进行比较,当结果相同时,再自动调用compareTo()方法对元素的内容进行比较。
所以 往往需要对对象重写hashcode()和compareTo()方法
作者: 陈国安    时间: 2015-5-5 17:56
hashset中经常用到hashcode来比较和存储的。所以如果是自定义的对象,需要重写hashcode和equels




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