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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


import java.util.*;
class circle{
        public static void main(String [] agrs)
        {
                HashMap<student,String> t = new HashMap<student,String>();
                t.put(new student("key01",21),"look");
                t.put(new student("key02",25),"university");
                t.put(new student("key03",23),"open");
                t.put(new student("key04",24),"person");
               
                Set<Map.Entry<student, String>> entrySet=t.entrySet();//将map中所有的键存入到set集合。
               
                Iterator<Map.Entry<student,String>> it = entrySet.iterator();
               
                while(it.hasNext())
                {
                        Map.Entry<student, String> m =it.next();
                        student stu=m.getKey();
                        String s=m.getValue();                       
                        System.out.println(stu+".."+s);
                }
               
        }
               
       
}
class student implements Comparable<student>
{
        private String name;
        private int age;
        student(String name,int age)
        {
                this.name=name;
                this.age=age;
        }
       
        public int compareTo(student s)
        {
                int num= new Integer(this.age).compareTo(new Integer(s.age));
                if(num==0)
                {
                        return this.name.compareTo(s.name);
                }
                return num;
                /*
                 * new Integer(this.age)的意义就是把age转换为int类型的。*/
        }
        public int hashCode()
        {
                return name.hashCode()+age;
        }
        public boolean equals(Object obj)
        {
                if(!(obj instanceof student))
                        throw new ClassCastException("类型不匹配!");
                student s=(student)obj;
                return this.name.equals(s.name)&&this.age==s.age;
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
               
        public String toString()
        {
                return name+":"+age;
        }
}

4 个回复

正序浏览
李培根 来自手机 金牌黑马 2012-12-16 21:20:51
报纸
楼主在主函数内只是创建了hashmap集合,存储元素,转成set集合,取出元素,没有排序的动作。

经楼主提醒,map集合排序还真没研究过,不过感觉用keySet对map集合排序应该比较简单些。
回复 使用道具 举报
                /*
                 * new Integer(this.age)的意义就是把age转换为int类型的。*/ 程序没啥问题,注释有问题,这是把基本数据类型的int转换成基本数据类型封装类Integer,从而调用equals方法。
用HashSet的话需要重写HashCode()和equals()方法,如果想排序的话需要用TreeSet,equals方法,只能保证元素不重复。即键唯一。用TreeSet须重写compareTo方法,和实现Comparable接口,TreeSet底层会自动调用该方法。
回复 使用道具 举报
排序不成功是应该的,你实现了Comparable接口,并复写了compareTo方法,但是,你这个程序在底层好像就没调用过compareTo方法,你试试把compareTo的返回值改为正数、负数、0看看效果,输出结果是不会改变的、
回复 使用道具 举报
亲测可以成功运行的...楼主看下是否改动之后没有保存.....
key..vale,下面是返回的结果...
key01:21..look
key03:23..open
key02:25..university
key04:24..person
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马