Map常见遍历方法及简单性能分析

常见的Map遍历方法

一、通过map.keySet()

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class TestMap {

    public static void main(String[] args) {
        Map<String,String> map = new HashMap<String, String>();
        map.put("A", "1");
        map.put("B", "2");
        map.put("C", "2");
        map.put("D", "4");

        Set<String> set = map.keySet(); //返回map key的Set集合
        for(String t: set){
            String key = t;
            String value = map.get(key);
            System.out.println("Key:"+key+",Value:"+value);
        }
    }
}

二、通过map.entrySet()

又分成两种具体的写法,主要区别在于遍历map.entrySet()结果

  1. 通过增强for循环遍历map.entrySet()结果得到Key和Value
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class TestMap {

    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("A", "1");
        map.put("B", "2");
        map.put("C", "2");
        map.put("D", "4");

        Set<Map.Entry<String, String>> set = map.entrySet();
        for (Map.Entry<String, String> ent : set) {
            String key = ent.getKey();
            String value = ent.getValue();
            System.out.println("Key:"+key+",Value:"+value);
        }
    }
}
  1. 通过增强Iterator遍历map.entrySet()结果得到Key和Value
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class TestMap {

    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("A", "1");
        map.put("B", "2");
        map.put("C", "2");
        map.put("D", "4");

        Set<Map.Entry<String, String>> set = map.entrySet();
        Iterator<Map.Entry<String, String>> ite = set.iterator();
        while(ite.hasNext()){
            Map.Entry<String, String> ent = ite.next();
            String key = ent.getKey();
            String value = ent.getValue();
            System.out.println("Key:"+key+",Value:"+value);
        }
    }
}

三、通过map.values()

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class TestMap {

    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("A", "1");
        map.put("B", "2");
        map.put("C", "2");
        map.put("D", "4");

        Collection<String> values = map.values();
        for(String v : values){
            System.out.println("Values: " + v);
        }
    }
}

简单的性能分析

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class TestMap {

    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        //放入10万个数据
        for(int t=0; t<100000; ++t){
            map.put(Integer.toString(t), "B");
        }

        long t_keySet = testKeySet(map);
        long t_entrySet = testEntrySet(map);
        long t_values = testValues(map);

        //打印map.keySet()耗时
        System.out.println("map.keySet():"+t_keySet);
        //打印map.entrySet()耗时
        System.out.println("map.entrySet():"+t_entrySet);
        //打印map.values()耗时
        System.out.println("map.values():"+t_values);
    }
    //测试map.keySet()方法效率
    public static long testKeySet(Map<String, String> map){
        long time = System.currentTimeMillis();
        Set<String> set = map.keySet(); //返回map key的Set集合
        for(String t: set){
            String key = t;
            String value = map.get(key);
            System.out.println("Key:"+key+",Value:"+value);
        }
        time = System.currentTimeMillis()-time;
        return time;
    }
    //测试map.entrySet()方法效率
    public static long  testEntrySet(Map<String, String> map){
        long time = System.currentTimeMillis();
        Set<Map.Entry<String, String>> set = map.entrySet();
        for (Map.Entry<String, String> ent : set) {
            String key = ent.getKey();
            String value = ent.getValue();
            System.out.println("Key:"+key+",Value:"+value);
        }
        time = System.currentTimeMillis()-time;
        return time;
    }
    //测试map.values()方法效率
    public static long testValues(Map<String, String> map){
        long time = System.currentTimeMillis();
        Collection<String> values = map.values();
        for(String v : values){
            System.out.println("Values: " + v);
        }
        time = System.currentTimeMillis()-time;
        return time;
    }
}

第一次:

map.keySet():1241
map.entrySet():1373
map.values():807

第二次:

map.keySet():1241
map.entrySet():1369
map.values():798

第三次:

map.keySet():1239
map.entrySet():1373
map.values():805

总结:

如果是只需要值的话推荐最后一种,需要键值对话推荐第二种。

注:以上版本在jdk1.8中测试结果不同版本效率可能出现差异

参考:
Map集合的四种遍历方式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值