Map循环嵌套的四种遍历方式

首先看一下集合的存储,map3的键值为0和1(这里是为了方便),然后value值分别又是一个map,那么来我们看一下分别用单纯的keySet和entrySet依靠迭代器进行遍历,然后是foreach配和keySet及entrySet遍历集合。

直接看代码吧:

import java.util.*;
//import java.util.Map.Entry;

public class MapMapTest {
    public static void main(String[] args) {
        Map<String,String> map1 = new HashMap<>();
        map1.put("001","qwer");
        map1.put("002","asdf");
        Map<String,String> map2 = new HashMap<>();
        map2.put("001","ujikol");
        map2.put("002","123456");
        Map<String,Map<String,String>> map3 = new HashMap<>();
        map3.put("0",map1);
        map3.put("1",map2);
        keySet1(map3);
        entrySet1(map3);
        keySet2(map3);
        entrySet(map3);
    }

    public static void keySet1(Map<String,Map<String,String>> map3) {
        Set<String> st1 = map3.keySet();
        Iterator<String> it1 = st1.iterator();
        while (it1.hasNext()) {
            String arr1 = it1.next();
            Map<String,String> map1 = map3.get(arr1);
            Set<String> st2 = map1.keySet();
            Iterator<String> it2 = st2.iterator();
            while (it2.hasNext()) {
                String arr2 = it2.next();
                String arr3 = map1.get(arr2);
                System.out.println(arr1 + "..." + arr2 + "..." + arr3);
            }
        }
    }

    public static void entrySet1(Map<String,Map<String,String>> map3) {
        Set<Map.Entry<String,Map<String,String>>> map1 = map3.entrySet();
        Iterator<Map.Entry<String,Map<String,String>>> it1 = map1.iterator();
        while (it1.hasNext()) {
            Map.Entry<String,Map<String,String>> entry = it1.next();
            String arr1 = entry.getKey();
            Map<String,String> map2 = entry.getValue();
            Set<Map.Entry<String,String>> map4 = map2.entrySet();
            Iterator<Map.Entry<String,String>> it2 = map4.iterator();
            while (it2.hasNext()) {
                Map.Entry<String,String> entry2 = it2.next();
                String arr2 = entry2.getKey();
                String arr3 = entry2.getValue();
                System.out.println(arr1 + "..." + arr2 + "..." + arr3);
            }
        }
    }
    public static void keySet2(Map<String,Map<String,String>> map3) {
        for(Object o1 : map3.keySet()) {
            String arr1 = (String) o1;
            Map<String,String> map1 = map3.get(arr1);
            for(Object o2 : map1.keySet()) {
                String arr2 = (String) o2;
                String arr3 = map1.get(arr2);
                System.out.println(arr1 + "..." + arr2 + "..." + arr3);
            }
        }
    }

    public static void entrySet(Map<String,Map<String,String>> map3) {
        for(Object o1 : map3.entrySet()) {
            Map.Entry<String,Map<String,String>> map1 = (Map.Entry<String,Map<String,String>>) o1;
            String arr1 = map1.getKey();
            Map<String,String> map2 = map1.getValue();
            for(Object o2 : map2.entrySet()) {
                Map.Entry<String,String> map = (Map.Entry<String,String>) o2;
                String arr2 = map.getKey();
                String arr3 = map.getValue();
                System.out.println(arr1 + "..." + arr2 + "..." + arr3);
            }
        }
    }
}

运行结果如下:(四个都一样)

0...001...qwer
0...002...asdf
1...001...ujikol
1...002...123456

可以说集合的嵌套遍历确实有点麻烦,尽量还是用foreach,起码代码量少。(新手,勿喷)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值