Java中Map类型遍历的两种方式对比

2015-01-29 21:15:58|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:Java|来源:唯设编程网

Java中Map类型是存储键值对数据的类型,在编程过程经常使用,进行遍历操作对于每个Java程序员都不会模式,下面总结两种常用的遍历方式(一种keySet,一种entrySet),通过对比让你明白使用entrySet遍历比使用keySet快。

一、使用Map.Entry

Map map = new HashMap();

Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
    Map.Entry entry = (Map.Entry) iter.next();
    Object key = entry.getKey();
    Object val = entry.getValue();
}

这种方式效率高,推荐使用此种方式!

二、使用Map的key进行遍历

Map map = new HashMap();
Iterator iter = map.keySet().iterator();
while (iter.hasNext()) {
    Object key = iter.next();
    Object val = map.get(key);
}

这种方式教第一种方式效率低,建议尽量少使用!

HashMap的遍历有两种常用的方法,那就是使用keyset及entryset来进行遍历,但两者的遍历速度是有差别的,下面分析一个完整实例:

package Test;

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

public class HashMapTest {
	private static int count = 10000;
	public static void main(String[] args) {
		//使用键进行遍历
		HashMap<String, String> hashmap = new HashMap<String, String>();
		for (int i = 0; i < count; ++i) {
			hashmap.put("" + i, "thanks");
		}

		long bs = Calendar.getInstance().getTimeInMillis();
		Iterator<String> iterator = hashmap.keySet().iterator();
		while (iterator.hasNext()) {
			System.out.print(hashmap.get(iterator.next()));
		}
		System.out.println();
		System.out.println("耗时1:"+(Calendar.getInstance().getTimeInMillis() - bs));
		//换一种方案
		listHashMap();
	}
	/**
	 * 使用键值对遍历
	 */
	public static void listHashMap() {
		HashMap<String,String> hashmap = new HashMap<String,String>();
		for (int i = 0; i < count; ++i) {
			hashmap.put("" + i, "thanks");
		}
		long bs = Calendar.getInstance().getTimeInMillis();
		Iterator<Map.Entry<String, String>> it = hashmap.entrySet().iterator();
		while (it.hasNext()) {
			Map.Entry<String,String> entry = it.next();
			// entry.getKey() 返回与此项对应的键
			// entry.getValue() 返回与此项对应的值
			System.out.print(entry.getValue());
		}
		System.out.println();
		System.out.println("耗时2:"+(Calendar.getInstance().getTimeInMillis() - bs));
	}
}

测试运行结果如下:

Java中Map类型遍历的两种方式对比

你可以发现使用entrySet明显比使用keySet快。是因为对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value。而entryset只是遍历了第一次,他把key和value都放到了entry中,所以就快了。

发表评论0条 】
网友评论(共?条评论)..
Java中Map类型遍历的两种方式对比