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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李成航 于 2012-3-15 15:51 编辑

如果我重写hashCode()方法,并让他返回同一个整数值,那此时的hash集合将如何排序?如下例子:
class Student {
        private int age;
        public int getAge() {
                return age;
        }

        public void setAge(int age) {
                this.age = age;
        }

        public Student(int a){this.age=a;}
       
        public int hashCode(){return 9;}//始终返回同一个整数9
       
       

}

public class Test{
       
        public static void main(String[] args){
               
                HashSet hs=new HashSet();
                hs.add(new Student(4));
                hs.add(new Student(1));
                hs.add(new Student(2));
                hs.add(new Student(3));       
                hs.add(new Student(3));
                Iterator it=hs.iterator();
                while(it.hasNext()){
                System.out.println(((Student)it.next()).getAge());//此时输出顺序是按什么排序的?
                }
        }
}
不知它是按什么排序的?因为此时每个对象的hash码重写后的返回值是相同的.





评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

2 个回复

正序浏览
HashSet是无序的 存入顺序和取出顺序是不一样的  无法事先确定取出顺序
要想对集合进行排序,可以用TreeSet  也可以用Collections中的sort()方法对List集合进行排序  前提是List集合中的对象必须继承Comparable并复写compareTo()方法或者传递自定义的比较器
回复 使用道具 举报
set 集合本来就没有顺序啊 只是集合里的每个元素都唯一而已
要有顺序的话就用Treeset吧

点评

严格来说,hashSet是按哈希码排序的,它的输出也不是随意的,只是不像List那样直观。  发表于 2012-3-15 16:02
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马