HashMap遍历几种方式比较(传统的Map迭代方式对比JDK8的迭代方式)


public class HashMapTest {
    public static void main(String[] args) {
        HashMap<Integer, String> map = new HashMap<>();
        map.put(1, "aaa");
        map.put(2, "abb");
        map.put(3, "acc");
        //  System.out.println(map.get(1));
        //方式1 键找值   Set<K> keySet()

        //1.集合 {1=aaa, 2=abb, 3=acc}
        System.out.println(map);

        //2.通过values 获取所有值,不能获取到key对象
        for (Integer i : map.keySet()) {
            System.out.println(map.get(i));
        }

        // 第一种方式: 使用keySet
        // 需要分别获取key和value,没有面向对象的思想
        Set<Integer> ks = map.keySet();
        
       /* Iterator<Integer> it = ks.iterator();
        while (it.hasNext()) {
            Integer key = it.next();
            String value = map.get(key);
            System.out.println("key=" + key + " value=" + value);
        }*/
       
       for(Integer key : ks){
           String value = map.get(key);
           System.out.println(key+"---"+value);
       }
        System.out.println();
        //方式2 键值对对象找键和值  Map.Entry对象  推荐使用
        //Set<Map.Entry<K,V>> entrySet()
   /*      Set<Map.Entry<Integer, String>> es = map.entrySet();
        
       Iterator<Map.Entry<Integer, String>> it2 = es.iterator();
        while(it2.hasNext()){
            // 返回的是封装了key和value对象的Map.Entry对象
            Map.Entry<Integer, String> en = it2.next();
            // 获取Map.Entry对象中封装的key和value对象
                        Integer key = en.getKey();
                         String value = en.getValue();
            System.out.println("key2=" + key + " value2=" + value);
        }*/
 
        Set<Map.Entry<Integer, String>> set2 = map.entrySet();
        for (Map.Entry<Integer, String> me : set2) {
            Integer key = me.getKey();
            String value = me.getValue();
            System.out.println(key + "---" + value);

        }
    }
}

//方式2 键值对对象找键和值 Map.Entry对象 推荐使用
最终代码

public class HashMapTest {
    public static void main(String[] args) {
        HashMap<Integer, String> map = new HashMap<>();
        map.put(1, "aaa");
        map.put(2, "abb");
        map.put(3, "acc");
        //  System.out.println(map.get(1));
        //方式1 键找值   Set<K> keySet()

        //1.集合 {1=aaa, 2=abb, 3=acc}
        System.out.println(map);

        //2.通过values 获取所有值,不能获取到key对象
        for (Integer i : map.keySet()) {
            System.out.println(map.get(i));
        }

        // 第一种方式: 使用keySet
        // 需要分别获取key和value,没有面向对象的思想
        Set<Integer> ks = map.keySet();

        for (Integer key : ks) {
            String value = map.get(key);
            System.out.println(key + "---" + value);
        }
        System.out.println();
        //方式2 键值对对象找键和值  Map.Entry对象  推荐使用
        //Set<Map.Entry<K,V>> entrySet()

        // 返回的是封装了key和value对象的Map.Entry对象
        for (Map.Entry<Integer, String> me : map.entrySet()) {
            // 获取Map.Entry对象中封装的key和value对象
            Integer key = me.getKey();
            String value = me.getValue();
            System.out.println(key + "---" + value);

        }
    }
}

传统的Map迭代方式对比JDK8的迭代方式

        HashMap<Integer, String> map = new HashMap<>();
        map.put(1, "aaa");
        map.put(2, "abb");
        map.put(3, "acc");

// 传统的Map迭代方式
        for (Map.Entry<Integer, String> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
// JDK8的迭代方式
        map.forEach((key, value) -> {
            System.out.println(key + ":" + value);
        });

你可能感兴趣的:(java基础)