java 中遍历双列集合_双列集合Map的嵌套遍历

双列集合Map的嵌套使用,例如HashMap中还有一个HashMap,这样的集合遍历起来稍微有点儿复杂。例如一个集合:HashMap> hm = new HashMap<>(),可以先把内层的HashMap看成一个整体,做完外层遍历之后再对内层遍历。

还是结合一个例子来说明Map集合的嵌套使用究竟是什么样子。例如一个年级有两个班,一个文科班和一个理科班,编号分别为A班和B班,两个班中又分别有学生,用HashMap来存储学生的姓名和年龄。可以先把两个班级的编号和对应信息存储在一个HashMap中,再用另一个HashMap来存储对应班级中的学生信息。

如:HashMap>,接下来看看代码的实现。

importjava.util.HashMap;importjava.util.Map;importjava.util.Set;public classHashMapDemo {public static voidmain(String[] args) {//创建外层HashMap来存储班级信息和学生,理科班用A作为键,文科班用B作为键,类型用Character。

HashMap> outHashMap = new HashMap<>();//创建两个班级的学生信息,姓名用String,年龄用Integer类型存储。//注意:集合中不能存储基本数据类型,这是集合区别于数组的特点之一。

HashMap inHashMap1 = new HashMap<>();

HashMap inHashMap2 = new HashMap<>();

inHashMap1.put("赵飞燕", 17);

inHashMap1.put("钱多多", 20);

inHashMap1.put("孙小可", 19);

inHashMap2.put("张可辛", 21);

inHashMap2.put("胡一刀", 21);

inHashMap2.put("王八蛋", 18);//把学生信息加到外层集合中。

outHashMap.put('A', inHashMap1);

outHashMap.put('B', inHashMap2);//开始遍历,先完成外层遍历。//方式一//获取外层集合键集合set1。

Set set1 =outHashMap.keySet();for(Character ch : set1) {

System.out.println(ch+ "班");//通过多层集合的键获取内层存储学生信息的集合对象。

HashMap inHashMap =outHashMap.get(ch);//获取内层存储学生信息集合的键的集合

Set set2 =inHashMap.keySet();for(String key : set2) {

System.out.println("\t" + key + ":" +inHashMap.get(key));

}

}//方式二//获取外层键值对对象的集合

Set>> outSet =outHashMap.entrySet();for (Map.Entry>keyEntry : outSet) {

System.out.println(keyEntry.getKey()+ "班");//获取内层键值对对象的集合

Set> inSet =keyEntry.getValue().entrySet();for (Map.Entrykey : inSet) {

System.out.println("\t" + key.getKey() + ":" +key.getValue());

}

}

}

}

通过上面的例子可以看出:集合Map的嵌套不管用哪种方式遍历,思想是一致的,都是先从外层依次向内层遍历,但是二者也有不同的地方。

方式一是先获取外层集合的键的集合,通过遍历键时再获取该键对应的值,而内层也是一样,同样先获取内层集合键的集合,再依次取出键所对应的值达到遍历的目的。

方式二是把键和值看作一个整体,先取到整个键值对对象的集合,再通过该键值对对象的getKey()和getValue()方法来分别获取该键值对对象的键和值。内层也是同样的原理。

遍历嵌套双列集合时,一定要把握好每一步操作的对象,不要弄混淆,保持清楚的思路很重要,这样即使有多层嵌套也没有问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值