遍历map的方法

package com.ming.test;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class MapTest {

    /**
     * 方法一 在for-each循环中使用entries来遍历
     * 这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用
     *
     * 注意:for-each循环在java 5中被引入所以该方法只能应用于java 5或更高的版本中。
     * 如果你遍历的是一个空的map对象,for-each循环将抛出NullPointerException,因此在遍历前你总是应该检查空引用。
     */
    public void testEntries(){
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
        map.put(1,11);
        map.put(2,22);
        map.put(3,33);
        map.put(4,44);
        map.put(5,55);
        for (Map.Entry<Integer,Integer> entry : map.entrySet()){
            System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
        }
    }

    /**
     *方法二 在for-each循环中遍历keys或values。
     *
     * 如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet
     * 该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净
     */
    public void testTwo(){
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
        map.put(1,11);
        map.put(2,22);
        map.put(3,33);
        map.put(4,44);
        map.put(5,55);
        //遍历map的键
        for(Integer key : map.keySet()){
            System.out.println("Key = " + key);
        }

        // 遍历map的值
        for(Integer value:map.values()){
            System.out.println("Value = " + value);
        }
    }

    /**
     * 方法三使用Iterator遍历
     */
    public void testThree(){
        //使用泛型
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
        map.put(1,11);
        map.put(2,22);
        map.put(3,33);
        map.put(4,44);
        map.put(5,55);
        Iterator<Map.Entry<Integer,Integer>> entries = map.entrySet().iterator();
        while (entries.hasNext()){
            Map.Entry<Integer,Integer> entry = entries.next();
            System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
        }

        System.out.println("------------");

        //不使用泛型

        Map map1 = new HashMap();
        map1.put(1,11);
        map1.put(2,22);
        map1.put(3,33);
        map1.put(4,44);
        map1.put(5,55);
        Iterator entries1 = map.entrySet().iterator();
        while (entries1.hasNext()) {
            Map.Entry entry1 = (Map.Entry) entries1.next();
            Integer key = (Integer)entry1.getKey();
            Integer value = (Integer)entry1.getValue();
            System.out.println("Key = " + key + ", Value = " + value);

        }

    }

    /**
     * 作为方法一的替代,这个代码看上去更加干净;但实际上它相当慢且无效率。因为从键取值是耗时的操作(与方法一相比,
     * 在不同的Map实现中该方法慢了20%~200%)。如果你安装了FindBugs,它会做出检查并警告你关于哪些是低效率的遍历。
     * 所以尽量避免使用。
     */
    public void testFour(){
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
        map.put(1,11);
        map.put(2,22);
        map.put(3,33);
        map.put(4,44);
        map.put(5,55);
        for (Integer key : map.keySet()) {

            Integer value = map.get(key);

            System.out.println("Key = " + key + ", Value = " + value);

        }
    }


    public static void main(String[] args){
        MapTest a = new MapTest();
        a.testFour();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值