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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 陶圣虎 于 2014-8-10 13:17 编辑

Map 集合使用是因为具有映射关系

特殊情况:映射关系中嵌套Map集合

yureban 01 zhangshan
yureban 02 lisi
jiuyeban 01 wangwu
jiuyeban 02 zhaoliu
学校有教室,教室有学生,学生有编号
毕老师视频里是先存的String,在存的Map,我这里反过来了
但是出现的问题很不解,就是里面注释的部位,换了下位置,输出结果不一样,我不知道czbk.put()的位置还影响结果,希望大家帮我看下。
*/
  1. import java.util.*;
  2. class MapDemo3
  3. {
  4.         public static void main(String []args)
  5.         {
  6.                
  7.                 HashMap<HashMap<String,String>,String> czbk = new HashMap<HashMap<String,String>,String>();
  8.                 HashMap<String,String>        yure = new HashMap<String,String>();
  9.                 HashMap<String,String>        jiuye = new HashMap<String,String>();
  10.                
  11.                 czbk.put(yure,"yureban");                //在上面时只输出     jiuyeban
  12.                 czbk.put(jiuye,"jiuyeban");                //        01:zhangsan
  13.                 yure.put("01","zhangsan");                //         02:lisi
  14.                 yure.put("02","lisi");
  15.                 jiuye.put("01","wangwu");
  16.                 jiuye.put("02","zhaoliu");
  17.                 //czbk.put(yure,"yureban");     //在下面就可以输出完整信息
  18.                 //czbk.put(jiuye,"jiuyeban");  //为什么这里变换位置会影响结果        
  19.                
  20.             
  21.                 Set<Map.Entry<HashMap<String,String>,String>> entryset = czbk.entrySet();
  22.                 Iterator<Map.Entry<HashMap<String,String>,String>> it = entryset.iterator();               
  23.                 while (it.hasNext())
  24.                 {
  25.                         Map.Entry<HashMap<String,String>,String> me = it.next();
  26.                         HashMap<String,String> room = me.getKey();
  27.                         String roomname = me.getValue();
  28.                         System.out.println(roomname);        
  29.                         getStuInfo(room);
  30.                
  31.                 }
  32.                

  33.         }

  34.         public static void getStuInfo(HashMap<String,String> room)
  35.         {
  36.                 Set<Map.Entry<String,String>> entrySet = room.entrySet();
  37.                 Iterator <Map.Entry<String,String>> iter = entrySet.iterator();
  38.                 while (iter.hasNext())
  39.                 {
  40.                         Map.Entry<String,String> me2 = iter.next();
  41.                         String id = me2.getKey();
  42.                         String name = me2.getValue();
  43.                         System.out.println(id+":"+name);
  44.                 }        
  45.         }

  46. }
复制代码

9 个回复

倒序浏览
应该是循环的问题
回复 使用道具 举报
czbk.put(yure, "yureban"); // 加入了空的yure 和字符串yureban

                czbk.put(jiuye, "jiuyeban"); // 加入了空的yure和字符串jiuyeban 还把上面的给覆盖了所以只输出jiuyeban

                 yure.put("01","zhangsan"); // yure中加入01 zhangsan
                 yure.put("02","lisi");//yure中加入02 lisi
               
                 jiuye.put("01","wangwu");//jiuye加入01 wangwu               
                 jiuye.put("02","zhaoliu");//jiuye加入02 zhaoliu
                 czbk.put(yure,"yureban");//这里你又把yure中的元素从新加了一边,和yureban
                 czbk.put(jiuye,"jiuyeban"); //这里你又把jiuye中的元素从新加了一边,和jiuyeban
基本上就是这样。。。。。看的我也晕了
回复 使用道具 举报
张涛的狂怒 发表于 2014-8-7 19:47
czbk.put(yure, "yureban"); // 加入了空的yure 和字符串yureban

                czbk.put(jiuye, "jiuyeban"); // 加入 ...

代码中 czbk.put(yure,"yureban"); czbk.put(jiuye,"jiuyeban"); 只执行一遍啊。我的意思是说 他放在子Map集合添加元素前后运行的结果有差别。
你说的put()怎么会覆盖值呢,存入的是不同的Map键啊。
回复 使用道具 举报
陶圣虎 发表于 2014-8-7 21:06
代码中 czbk.put(yure,"yureban"); czbk.put(jiuye,"jiuyeban"); 只执行一遍啊。我的意思是说 他放在子Ma ...

czbk.put(yure, "yureban"); // 加入了空的yure 和字符串yureban
czbk.put(jiuye, "jiuyeban"); // 加入了空的yure和字符串jiuyeban 还把上面的给覆盖了所以只输出jiuyeban
第一行和第二行的这两句的键都为null,value值会被覆盖
回复 使用道具 举报
本帖最后由 张涛的狂怒 于 2014-8-7 22:33 编辑

你要先弄清楚里面的关系


回复 使用道具 举报
HashMap<String,String>        yure = new HashMap<String,String>();

HashMap<String,String>        jiuye = new HashMap<String,String>();
这两个代表的是czbk Hashmap的键。。。。。。
回复 使用道具 举报
张涛的狂怒 发表于 2014-8-7 22:28
HashMap        yure = new HashMap();

HashMap        jiuye = new HashMap();

但是为什么输出的是zhangsan lisi  而不是wangwu zhaoliu
回复 使用道具 举报
陶圣虎 发表于 2014-8-8 20:57
但是为什么输出的是zhangsan lisi  而不是wangwu zhaoliu

因为你map集合里只有一个值,这时你添加的键是zhangsan lisi  ,他们自动关联,形成键值对。
再往里添加wangwu zhaoliu就没有值与之关联,不能形成键值对,所有季和丽只有一个键值对。
zhangsan  lishi 关联jiuyeban形成的键值对
回复 使用道具 举报
收到,明白。 谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马