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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sunriselzz 中级黑马   /  2013-8-19 21:48  /  2303 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在实际开发中,会使用到Map集合的多重嵌套遍历么?
如果重数更多(嵌套遍历>3),那程序代码就显得复杂了,阅读性差,请问这时候还是使用这种遍历么?
如例如,本人在学习Map集合时写了个HashMap集合的3重嵌套实现传智播客公司校区,及学院,学科班级的遍历
但是,如果我还要再得到它们每个班级的学员信息呢?那我还能再继续这样嵌套遍历下去么?
  1. package cn.genericdefine;

  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import java.util.LinkedHashMap;
  5. import java.util.Map;
  6. import java.util.Set;

  7. public class HashMapCZBK {

  8.         /**
  9.          * HashMap集合3重嵌套实现传智播客公司校区,及学院,学科班级的遍历
  10.          *
  11.          * 传智播客公司 |--北京校区 |--Java学院 |--.Net学院 |--PHP学院 |--平面设计学院 |--IOS学院
  12.          *
  13.          * |--上海校区 |--Java学院 |--.Net学院 |--PHP学院 |--平面设计学院
  14.          *
  15.          * |--广州校区 |--Java学院 |--.Net学院 |--PHP学院
  16.          *
  17.          * |--成都校区 |--Java学院 |--.Net学院
  18.          *
  19.          * @param args
  20.          */
  21.         public static void main(String[] args) {
  22.                 // 创建公司集合company
  23.                 LinkedHashMap<String, LinkedHashMap<String, ArrayList<String>>> company = new LinkedHashMap<String, LinkedHashMap<String, ArrayList<String>>>();

  24.                 // 创建班级集合
  25.                 ArrayList<String> javaClass = new ArrayList<String>();
  26.                 javaClass.add("JavaSE基础班");
  27.                 javaClass.add("JavaEE就业班");
  28.                 javaClass.add("Android就业班");

  29.                 ArrayList<String> netClass = new ArrayList<String>();
  30.                 netClass.add(".NET基础班");
  31.                 netClass.add(".NET就业班");

  32.                 ArrayList<String> phpClass = new ArrayList<String>();
  33.                 phpClass.add("PHP基础班");
  34.                 phpClass.add("PHP就业班");

  35.                 ArrayList<String> iosClass = new ArrayList<String>();
  36.                 iosClass.add("IOS基础班");
  37.                 iosClass.add("IOS就业班");

  38.                 ArrayList<String> designClass = new ArrayList<String>();
  39.                 designClass.add("平面设计基础班");
  40.                 designClass.add("平面设计就业班");

  41.                 // 创建学院集合
  42.                 LinkedHashMap<String, ArrayList<String>> college = new LinkedHashMap<String, ArrayList<String>>();

  43.                 college.put("Java学院", javaClass);
  44.                 college.put(".Net学院", netClass);
  45.                 college.put("PHP学院", phpClass);
  46.                 college.put("IOS学院", iosClass);
  47.                 college.put("平面设计学院", designClass);

  48.                 // 创建校区集合
  49.                 company.put("北京校区", college);
  50.                 company.put("上海校区", college);
  51.                 company.put("广州校区", college);
  52.                 company.put("成都校区", college);

  53.                 System.out.println("-------------第1种遍历方式-----------------");

  54.                 /*
  55.                  * Set<String> schoolSet = company.keySet(); Iterator<String>
  56.                  * schoolSetIt = schoolSet.iterator();
  57.                  *
  58.                  * while(schoolSetIt.hasNext()){ String schoolKey = schoolSetIt.next();
  59.                  * System.out.println(schoolKey);
  60.                  *
  61.                  * LinkedHashMap<String,ArrayList<String>> collegeMapValue =
  62.                  * company.get(schoolKey); Set<String> collegeSet =
  63.                  * collegeMapValue.keySet(); Iterator<String> collegeIt =
  64.                  * collegeSet.iterator();
  65.                  *
  66.                  * while(collegeIt.hasNext()){ String collegeKey = collegeIt.next();
  67.                  * System.out.println("\t"+collegeKey);
  68.                  *
  69.                  * ArrayList<String> classValueSet = college.get(collegeKey);
  70.                  * Iterator<String> classIt = classValueSet.iterator();
  71.                  *
  72.                  * while(classIt.hasNext()){ String classValue = classIt.next();
  73.                  * System.out.println("\t\t"+classValue); } } }
  74.                  */

  75.                 System.out.println("-------------第2种遍历方式-----------------");

  76.                 Set<Map.Entry<String, LinkedHashMap<String, ArrayList<String>>>> schoolSet = company
  77.                                 .entrySet();
  78.                 Iterator<Map.Entry<String, LinkedHashMap<String, ArrayList<String>>>> schoolIt = schoolSet
  79.                                 .iterator();

  80.                 while (schoolIt.hasNext()) {
  81.                         Map.Entry<String, LinkedHashMap<String, ArrayList<String>>> schoolme = schoolIt
  82.                                         .next();
  83.                         String schoolName = schoolme.getKey();
  84.                         System.out.println(schoolName);
  85.                         LinkedHashMap<String, ArrayList<String>> collegeValueMap = schoolme
  86.                                         .getValue();

  87.                         Set<Map.Entry<String, ArrayList<String>>> collegeSet = collegeValueMap
  88.                                         .entrySet();
  89.                         Iterator<Map.Entry<String, ArrayList<String>>> collegeIt = collegeSet
  90.                                         .iterator();

  91.                         while (collegeIt.hasNext()) {
  92.                                 Map.Entry<String, ArrayList<String>> collegeme = collegeIt
  93.                                                 .next();
  94.                                 String collegeName = collegeme.getKey();
  95.                                 System.out.println("\t" + collegeName);

  96.                                 ArrayList<String> classNameSet = collegeme.getValue();
  97.                                 Iterator<String> classIt = classNameSet.iterator();
  98.                                 while (classIt.hasNext()) {
  99.                                         String clazz = classIt.next();
  100.                                         System.out.println("\t\t" + clazz);
  101.                                 }

  102.                         }

  103.                 }
  104.         }

  105. }
复制代码
运行效果截图:






效果图.jpg (604.74 KB, 下载次数: 21)

效果图.jpg

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
应该是可以的,不过你这样写写的估计够呛,以后要注意写代码不要老一陀陀的全整在主函数里啊,封装在方法内可读性比较好,然后就是你说的连续嵌套,可以用递归的方法嵌套下去,所以建议你将要嵌套的方法封装到单独的方法内方便递归。

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
嗯啊,受教了,我以为遍历的次数不多,没有想到用递归唉!所以当时就呛得晕了,写不下去了.
这个代码是当初学习的时候写的,没有进行完善,还有就是粘上去的时候,没有想到是这种效果.
汗{:soso_e140:}
回复 使用道具 举报
楼主写这个估计写了很久{:soso_e179:}
回复 使用道具 举报
加了一种遍历方式,代码看着能短点
  1. package test;

  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import java.util.LinkedHashMap;
  5. import java.util.Map;
  6. import java.util.Set;

  7. public class HashMapCZBK {

  8.         /**
  9.          * HashMap集合3重嵌套实现传智播客公司校区,及学院,学科班级的遍历
  10.          *
  11.          * 传智播客公司 |--北京校区 |--Java学院 |--.Net学院 |--PHP学院 |--平面设计学院 |--IOS学院
  12.          *
  13.          * |--上海校区 |--Java学院 |--.Net学院 |--PHP学院 |--平面设计学院
  14.          *
  15.          * |--广州校区 |--Java学院 |--.Net学院 |--PHP学院
  16.          *
  17.          * |--成都校区 |--Java学院 |--.Net学院
  18.          *
  19.          * @param args
  20.          */
  21.         public static void main(String[] args) {
  22.                 // 创建公司集合company
  23.                 LinkedHashMap<String, LinkedHashMap<String, ArrayList<String>>> company = new LinkedHashMap<String, LinkedHashMap<String, ArrayList<String>>>();

  24.                 // 创建班级集合
  25.                 ArrayList<String> javaClass = new ArrayList<String>();
  26.                 javaClass.add("JavaSE基础班");
  27.                 javaClass.add("JavaEE就业班");
  28.                 javaClass.add("Android就业班");

  29.                 ArrayList<String> netClass = new ArrayList<String>();
  30.                 netClass.add(".NET基础班");
  31.                 netClass.add(".NET就业班");

  32.                 ArrayList<String> phpClass = new ArrayList<String>();
  33.                 phpClass.add("PHP基础班");
  34.                 phpClass.add("PHP就业班");

  35.                 ArrayList<String> iosClass = new ArrayList<String>();
  36.                 iosClass.add("IOS基础班");
  37.                 iosClass.add("IOS就业班");

  38.                 ArrayList<String> designClass = new ArrayList<String>();
  39.                 designClass.add("平面设计基础班");
  40.                 designClass.add("平面设计就业班");

  41.                 // 创建学院集合
  42.                 LinkedHashMap<String, ArrayList<String>> college = new LinkedHashMap<String, ArrayList<String>>();

  43.                 college.put("Java学院", javaClass);
  44.                 college.put(".Net学院", netClass);
  45.                 college.put("PHP学院", phpClass);
  46.                 college.put("IOS学院", iosClass);
  47.                 college.put("平面设计学院", designClass);

  48.                 // 创建校区集合
  49.                 company.put("北京校区", college);
  50.                 company.put("上海校区", college);
  51.                 company.put("广州校区", college);
  52.                 company.put("成都校区", college);

  53.                 System.out.println("-------------第1种遍历方式-----------------");

  54.                 /*
  55.                  * Set<String> schoolSet = company.keySet(); Iterator<String>
  56.                  * schoolSetIt = schoolSet.iterator();
  57.                  *
  58.                  * while(schoolSetIt.hasNext()){ String schoolKey = schoolSetIt.next();
  59.                  * System.out.println(schoolKey);
  60.                  *
  61.                  * LinkedHashMap<String,ArrayList<String>> collegeMapValue =
  62.                  * company.get(schoolKey); Set<String> collegeSet =
  63.                  * collegeMapValue.keySet(); Iterator<String> collegeIt =
  64.                  * collegeSet.iterator();
  65.                  *
  66.                  * while(collegeIt.hasNext()){ String collegeKey = collegeIt.next();
  67.                  * System.out.println("\t"+collegeKey);
  68.                  *
  69.                  * ArrayList<String> classValueSet = college.get(collegeKey);
  70.                  * Iterator<String> classIt = classValueSet.iterator();
  71.                  *
  72.                  * while(classIt.hasNext()){ String classValue = classIt.next();
  73.                  * System.out.println("\t\t"+classValue); } } }
  74.                  */

  75.                 System.out.println("-------------第2种遍历方式-----------------");

  76. /*               Set<Map.Entry<String, LinkedHashMap<String, ArrayList<String>>>> schoolSet = company
  77.                                 .entrySet();
  78.                 Iterator<Map.Entry<String, LinkedHashMap<String, ArrayList<String>>>> schoolIt = schoolSet
  79.                                 .iterator();

  80.                 while (schoolIt.hasNext()) {
  81.                         Map.Entry<String, LinkedHashMap<String, ArrayList<String>>> schoolme = schoolIt
  82.                                         .next();
  83.                         String schoolName = schoolme.getKey();
  84.                         System.out.println(schoolName);
  85.                         LinkedHashMap<String, ArrayList<String>> collegeValueMap = schoolme
  86.                                         .getValue();

  87.                         Set<Map.Entry<String, ArrayList<String>>> collegeSet = collegeValueMap
  88.                                         .entrySet();
  89.                         Iterator<Map.Entry<String, ArrayList<String>>> collegeIt = collegeSet
  90.                                         .iterator();

  91.                         while (collegeIt.hasNext()) {
  92.                                 Map.Entry<String, ArrayList<String>> collegeme = collegeIt
  93.                                                 .next();
  94.                                 String collegeName = collegeme.getKey();
  95.                                 System.out.println("\t" + collegeName);

  96.                                 ArrayList<String> classNameSet = collegeme.getValue();
  97.                                 Iterator<String> classIt = classNameSet.iterator();
  98.                                 while (classIt.hasNext()) {
  99.                                         String clazz = classIt.next();
  100.                                         System.out.println("\t\t" + clazz);
  101.                                 }

  102.                         }

  103.                 }*/
  104.                
  105.              System.out.println("-------------第3种遍历方式-----------------");  
  106.              for(Map.Entry<String, LinkedHashMap<String, ArrayList<String>>> mapEntry: company.entrySet()){
  107.                              Map.Entry<String, LinkedHashMap<String, ArrayList<String>>> entry = mapEntry;
  108.                              String schoolName = entry.getKey().toString();
  109.                              System.out.println(schoolName);
  110.                              LinkedHashMap<String, ArrayList<String>> collegeValueMap = entry.getValue();
  111.                              for(Map.Entry<String, ArrayList<String>> mapEntry1:  collegeValueMap.entrySet()){
  112.                                      Map.Entry<String, ArrayList<String>> entry1 = mapEntry1;
  113.                                      String collegeName = entry1.getKey().toString();
  114.                                      System.out.println("\t" + collegeName);
  115.                                      ArrayList<String> classNameSet = entry1.getValue();
  116.                                      for(String list: classNameSet){
  117.                                              String clazz = list;
  118.                                              System.out.println("\t\t" + clazz);
  119.                                      }
  120.                              }
  121.                      }
  122.         }
  123. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马