JAVA遍历map效率

java map集合如何遍历效率高 java中Map遍历的方式

1、在看 《阿里巴巴java开发手册》时候,有一条推荐的规约: 【推荐】使用entrySet遍历Map类集合KV,而不是keySet方式进行遍历。 说明:keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从hashMap中取出key所对应的value。而entrySet只是遍历了一次就把key和value都放到了entry中,效率更高。

二、Map集合的遍历

1、根据 key 找 value

获取所有的 key 集合。 map.keySet()
遍历 key 集合。

根据 key 到集合中去找 value 。 map.get(key)

2、根据 key–value 键值对 找键和值

获取所有的 key–value键值对集合。 map.entrySet()
遍历键值对集合,获取每一个键值对对象。
根据键值对对象,获取 key 键 和 value 值。 entry.getKey(); entry.getValue();

3、遍历values 值对象: map.values();

三、代码实现

1、 遍历测试代码如下:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import org.junit.Test;
/**
* description: 遍历Map集合效率比较
* @version v1.0
* @author w
* @date 2018年10月23日上午11:20:08
*/
public class ForeachMap {
    /**
    * description: 初始化map集合中元素
    * @param map
    * @version v1.0
    * @author w
    * @date 2018年10月23日 下午2:45:35
    */
    public void init(Map<Integer, String> map){
        // 初始化map集合中元素的个数
        int count = 1000000;
        for (int i = 1; i <= count; i++) {
            map.put(i, i+ " ---> map");
        }
    }
 
    @Test
    public void test(){
        Map<Integer, String> map = new HashMap<>();
        Map<Integer, String> map2 = new HashMap<>();
        long start = System.currentTimeMillis();
        init(map);
        init(map2);
        System.out.println("装载map耗时: "+(System.currentTimeMillis()-start)+ " ms");
 
        start = System.currentTimeMillis();
        foreachKeyset(map);
        System.out.println("foreachKeyset 遍历 map耗时: "+(System.currentTimeMillis()-start)+ " ms");
    
        start = System.currentTimeMillis();
        foreachEntry(map2);
        System.out.println("foreachEntry 遍历 map耗时: "+(System.currentTimeMillis()-start)+ " ms");
 
        start = System.currentTimeMillis();
        iteratorEntry(map2);
        System.out.println("iteratorEntry 遍历 map耗时: "+(System.currentTimeMillis()-start)+ " ms");
        System.out.println(map.size());
    }
 
    /**
    * description: 根据 key 找 value
    * @param map
    * @version v1.0
    * @author w
    * @date 2018年10月23日 下午5:10:01
    */
    private void foreachKeyset(Map<Integer, String> map) {
        for(Integer key : map.keySet()){
            String value = map.get(key);
            // System.out.println("foreachKeyset : key :" + key + "---> value :"+ value);
        }
    }
 
    /**
    * description: 根据 key--value 键值对 找键和值 ( foreach 遍历)
    * @param map
    * @version v1.0
    * @author w
    * @date 2018年10月23日 下午5:19:31
    */
    private void foreachEntry(Map<Integer, String> map) {
        for(Entry<Integer, String> entry : map.entrySet()){
        // System.out.println("foreachEntry : key :" + entry.getKey() + "---> value :"+entry.getValue());
        }
    }
 
    /**
    * description: 根据 key--value 键值对 找键和值 ( iterator 遍历)
    * @param map
    * @version v1.0
    * @author w
    * @date 2018年10月23日 下午5:19:01
    */
    private void iteratorEntry(Map<Integer, String> map) {
        Iterator<Entry<Integer, String>> iterator = map.entrySet().iterator();
        while(iterator.hasNext()){
            Entry<Integer, String> entry = iterator.next();
            // System.out.println("iteratorEntry : key :" + entry.getKey() + "---> value :"+entry.getValue());
        }
    }
 
}

2、运行结果:

装载map耗时: 2705 ms

foreachKeyset 遍历 map耗时: 44 ms

foreachEntry 遍历 map耗时: 22 ms

iteratorEntry 遍历 map耗时: 17 ms

1000000

四、总结

1、遍历 map 集合时,应该同时遍历出 键值对,这样效率更高。

2、若遍历过程中,需要根据条件删除集合中元素,参考:https://blog.csdn.net/HaHa_Sir/article/details/80295755

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值