2015-01-29 21:15:58|?次阅读|上传:wustguangh【已有?条评论】发表评论
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)); } }
测试运行结果如下:
你可以发现使用entrySet明显比使用keySet快。是因为对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value。而entryset只是遍历了第一次,他把key和value都放到了entry中,所以就快了。