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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© syw02014 高级黑马   /  2014-3-7 16:32  /  1634 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


传智播客(czbk)有多个教室。每一个教室都有名称(yure,jiuye),每个教室里有许多学生(学生有姓名和学号已经用HashMap存储),程序已定义实现,但是如何使每个教室中的学生按姓名排序,请问哪位大牛帮我完善一下:
  1.         public static void NormalMathod_HashMap()
  2.         {
  3.                 HashMap<String,HashMap<String,String>> czbk=new HashMap<String,HashMap<String,String>>();
  4.                 HashMap<String,String> yure=new HashMap<String,String>();
  5.                 HashMap<String,String> jiuye=new HashMap<String,String>();
  6.                
  7.                 czbk.put("yureban",yure);
  8.                 czbk.put("jiuyeban",jiuye);
  9.                
  10.                         yure.put("zhangsan03","03");
  11.                         yure.put("zhangsan01","01");
  12.                         yure.put("zhangsan02","02");
  13.                         yure.put("zhangsan04","04");
  14.                         yure.put("zhangsan05","05");
  15.                        
  16.                         jiuye.put("lisi001","001");
  17.                         jiuye.put("lisi004","004");
  18.                         jiuye.put("lisi002","002");
  19.                         jiuye.put("lisi005","005");
  20.                         jiuye.put("lisi003","003");
  21.                
  22.                 Set<String>gs_keyset=czbk.keySet();
  23.                 for(Iterator<String> it=gs_keyset.iterator();it.hasNext();)
  24.                 {
  25.                         String roomName=it.next();
  26.                         HashMap<String,String> room=czbk.get(roomName);
  27.                         System.out.println(roomName);
  28.                         getinfos_keyset(room);//打印学生信息,本人已定义实现,可以不用考虑
  29.                 }
  30.         }
复制代码



评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

6 个回复

倒序浏览
HashMap是无序的,你可以用TreeMap来存。我是看不太懂你的键值,你的键值为何是名字加学号啊。
回复 使用道具 举报
香菜病病患 发表于 2014-3-7 16:43
HashMap是无序的,你可以用TreeMap来存。我是看不太懂你的键值,你的键值为何是名字加学号啊。 ...

传智播客(czbk)有多个教室。每一个教室都有名称(yure,jiuye),每个教室里有许多学生(学生有姓名和学号已经用HashMap存储)
回复 使用道具 举报
syw02014 发表于 2014-3-7 16:45
传智播客(czbk)有多个教室。每一个教室都有名称(yure,jiuye),每个教室里有许多学生(学生有姓名和学号已 ...

你是一定要用HashMap来存么?那就必须先保证你存的对象的HashCode是一样的,但是你存的是String类型,String类是final的,不能继承重写HashCode方法。我技术拙劣,不换TreeMap我做不来。
回复 使用道具 举报
香菜病病患 发表于 2014-3-7 16:50
你是一定要用HashMap来存么?那就必须先保证你存的对象的HashCode是一样的,但是你存的是String类型,Str ...

好吧,你在这个程序的基础上做修改,使它按学生的姓名“倒序"排序:这个它的结果是:
jiuyeban
lisi001---001
lisi002---002
lisi003---003
lisi004---004
lisi005---005
yureban
zhangsan01---01
zhangsan02---02
zhangsan03---03
zhangsan04---04
zhangsan05---05
  1.         public static void NormalMathod_TreeMap()
  2.         {
  3.                 TreeMap<String,TreeMap<String,String>> czbk=new TreeMap<String,TreeMap<String,String>>();
  4.                 TreeMap<String,String> yure=new TreeMap<String,String>();
  5.                 TreeMap<String,String> jiuye=new TreeMap<String,String>();
  6.                
  7.                 czbk.put("yureban",yure);
  8.                 czbk.put("jiuyeban",jiuye);
  9.                
  10.                 yure.put("zhangsan01","01");
  11.                 yure.put("zhangsan02","02");
  12.                 yure.put("zhangsan04","04");
  13.                 yure.put("zhangsan05","05");
  14.                 yure.put("zhangsan03","03");
  15.                        
  16.                 jiuye.put("lisi001","001");
  17.                 jiuye.put("lisi004","004");
  18.                 jiuye.put("lisi002","002");
  19.                 jiuye.put("lisi005","005");
  20.                 jiuye.put("lisi003","003");
  21.                
  22.                 Set<Map.Entry<String,TreeMap<String,String>>>gs_entry=czbk.entrySet();
  23.                 for(Iterator<Map.Entry<String,TreeMap<String,String>>> it=gs_entry.iterator() ;it.hasNext();)
  24.                 {
  25.                         Map.Entry<String,TreeMap<String,String>> me=it.next();
  26.                         String roomName=me.getKey();
  27.                         TreeMap<String,String> room=me.getValue();
  28.                         System.out.println(roomName);
  29.                         getinfos_Entry(room);
  30.                 }
  31.         }
复制代码




回复 使用道具 举报
你可以把学生姓名封装成一个类然后重写hashCode和equals两个方法,让hashCode的返回值是个固定值,这样估计可以吧
回复 使用道具 举报
HashMap是按照Hashcode()来存储的,所以,要想有序,必须重写hashcode方法,把hashcode有序就可以了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马