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 hashmap = new HashMap();
for (int i = 0; i < count; ++i) {
hashmap.put("" + i, "thanks");
}
long bs = Calendar.getInstance().getTimeInMillis();
Iterator 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 hashmap = new HashMap();
for (int i = 0; i < count; ++i) {
hashmap.put("" + i, "thanks");
}
long bs = Calendar.getInstance().getTimeInMillis();
Iterator> it = hashmap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = it.next();
// entry.getKey() 返回与此项对应的键
// entry.getValue() 返回与此项对应的值
System.out.print(entry.getValue());
}
System.out.println();
System.out.println("耗时2:"+(Calendar.getInstance().getTimeInMillis() - bs));
}
}
测试运行结果如下:
你可以发现使用entrySet明显比使用keySet快。是因为对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value。而entryset只是遍历了第一次,他把key和value都放到了entry中,所以就快了。
【发表评论0条 】