HashMap的四种遍历方式及性能比较

一、数据准备

		HashMap<String, Integer> map = new HashMap<>();
		for(int i=0;i<10000000;i++) {
			map.put("key"+i, i);
		}

二、遍历方法

1、调用keySet(  )方法返回此映射所包含的键:一般用法,两次取值(分别取key和value):

		System.out.println("********方式一:keySet():********");
		long start=System.currentTimeMillis();
		for (String key : map.keySet()) {
			//System.out.println("(" + key + "," + map.get(key) + ")");
			map.get(key);

2、调用entrySet()方法返回此映射所包含的映射关系(高效,推荐使用):

		System.out.println("********方式二:entrySet():********");
		long start=System.currentTimeMillis();
		for (Map.Entry<String, Integer> entry : map.entrySet()) {
			//System.out.println("(" + entry.getKey() + "," + entry.getValue() + ")");
			entry.getKey();
			entry.getValue();
		}
		long end=System.currentTimeMillis();
		System.out.println("耗时:"+(end-start));
	

3、调用values()方法返回此映射所包含的值(仅得到value值):

		System.out.println("********方式三:values():********");
		long start=System.currentTimeMillis();
		for (int value : map.values()) {
			//System.out.println(value);
		}
		long end=System.currentTimeMillis();
		System.out.println("耗时:"+(end-start));

4、调用Iterator类的方法:(高效,遍历同时可删元素):

		System.out.println("********方式四:Iterator:********");
		long start=System.currentTimeMillis();
		Iterator<Map.Entry<String, Integer>> it = map.entrySet().iterator();
		while (it.hasNext()) {
			Map.Entry<String, Integer> entry = it.next();
			//System.out.println("(" + entry.getKey() + "," + entry.getValue() + ")");
			entry.getKey();
			entry.getValue();
		}
		long end=System.currentTimeMillis();
		System.out.println("耗时:"+(end-start));

三、运行结果及分析

通过运行结果可以看出来,方式一效率较低,而方式二和方式四运行效率相对较高。

四、小结

1、仅仅需要得遍历key,则可选择调用keySet()方法;

2、仅仅需要得到value,则可选择调用values()方法;

3、需要同遍历key和value值,推荐使用entrySet()方法;

4、需要在遍历key和value值时同时删除元素,推荐使用迭代器Iterator

猜你喜欢

转载自blog.csdn.net/LIAO_7053/article/details/82289600