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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1黑马币
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;
               
        }。。。。。。

最佳答案

查看完整内容

当使用HashSet 集合时,会自动调用 hashcode()方法和compareTo()方法,因为HashSet集合不允许存储重复的元素。 而当使用TreeSet集合时,要么采用自然排序方式(实现Comparable接口),要么采用自定义排序(构造比较器) 所以在使用这两种集合情况下,会不断重复将新添加的元素和原有的元素进行比较

4 个回复

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

意思是集合自动会调用hashCode方法把所有元素都拿过来,和传进去的元素都比较一下是不是?
回复 使用道具 举报
逍遥才子121 发表于 2015-5-5 10:19
意思是集合自动会调用hashCode方法把所有元素都拿过来,和传进去的元素都比较一下是不是? ...

bingo~~~ 先调用hashcode()方法对元素的哈希值进行比较,当结果相同时,再自动调用compareTo()方法对元素的内容进行比较。
所以 往往需要对对象重写hashcode()和compareTo()方法
回复 使用道具 举报
hashset中经常用到hashcode来比较和存储的。所以如果是自定义的对象,需要重写hashcode和equels
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马