欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

for循环遍历HashMap的优化

程序员文章站 2022-05-10 12:38:23
...
for循环遍历HashMap常用的有4种方式。

通过hashMap.keySet()遍历
keySet()方法返回HashMap中的key值的集合,然后通过get()方法传入key值,可以得到key对应的value值。示例代码:

    for (Integer key : hashMap.keySet()) {
        int value = hashMap.get(key);
    }
通过hashMap.values()遍历
values()方法返回HashMap中的value值的集合。示例代码:

for (Integer v : hashMap.values()) {
    int value = v;
}
通过hashMap.entrySet()遍历 entrySet()方法返回HashMap中的key-value键值对集合。key和value一一对应,都可以获取到。示例代码:
for (Map.Entry<Integer, Integer> entry : hashMap.entrySet()) {
    int key = entry.getKey();
    int value = entry.getValue();
}
通过Iterator遍历
以上3中遍历方式都可以获取结果集合的迭代器(Iterator),通过Iterator.next()方法遍历结果集.示例代码:

Iterator<Integer> integerIterator = hashMap.values().iterator();
while (integerIterator.hasNext()) {
    int value = integerIterator.next();
}




package com.dashidan.profile;

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

/**
* 大屎蛋教程网-dashidan.com
* for循环中的效率优化
* Created by 大屎蛋 on 2018/5/22.
*/
public class Demo2 {
    public static void main(String[] args) {
        int count = 1000000;
        /** 初始化HashMap*/
        HashMap<Integer, Integer> hashMap = new HashMap<>();

        long t0 = System.currentTimeMillis();
        for (int i = 0; i < count; i++) {
            hashMap.put(i, i);
        }

        /** 遍历Key获取Value*/
        long t1 = System.currentTimeMillis();
        for (Integer key : hashMap.keySet()) {
            int value = hashMap.get(key);
        }

        /** 遍历value*/
        long t2 = System.currentTimeMillis();
        for (Integer v : hashMap.values()) {
            int value = v;
        }

        long t3 = System.currentTimeMillis();
        /** 遍历Entry*/
        for (Map.Entry<Integer, Integer> entry : hashMap.entrySet()) {
            int key = entry.getKey();
            int value = entry.getValue();
        }

        long t4 = System.currentTimeMillis();
        /** Iterator 遍历*/
        Iterator<Integer> integerIterator = hashMap.values().iterator();
        while (integerIterator.hasNext()) {
            int value = integerIterator.next();
        }

        long t5 = System.currentTimeMillis();

        System.out.println(t1 - t0);
        System.out.println(t2 - t1);
        System.out.println(t3 - t2);
        System.out.println(t4 - t3);
        System.out.println(t5 - t4);
    }
}
总体说来,HashMap的put方法耗时会多余get方法。通过遍历keySet,然后再通过key获取value的方式效率最低。其余集中方式效率差不多。

结论:

如果只需要遍历value值,推荐采用遍历values()集合的方式。
如果遍历hashmap时,key和value都需要用到,推荐采用遍历entrySet的方式.
相关标签: map