锁定老帖子 主题:Java Map遍历速度最优解
精华帖 (0) :: 良好帖 (1) :: 新手帖 (15) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-12-09
第一种: 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 map = new HashMap(); Iterator iter = map.keySet().iterator(); while (iter.hasNext()) { Object key = iter.next(); Object val = map.get(key); } 效率低,以后尽量少使用! 对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value。而entryset只是遍历了第一次,他把key和value都放到了entry中,所以就快了。 注:Hashtable的遍历方法和以上的差不多! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-12-10
为啥不用entryset直接遍历呢?
Map<String, Object> map = new HashMap<String, Object>(); for (Entry<String, Object> entry : map.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); } |
|
返回顶楼 | |
发表时间:2011-12-10
最后修改:2011-12-10
map.values(); 如果你不关注key的话,还可以这样
ps: 第二种不是遍历了两次,而是多hash了一次(效率的差别,主要看key的hashCode具体算法) |
|
返回顶楼 | |
发表时间:2011-12-10
最好能给出测试数据,给出时间
|
|
返回顶楼 | |
发表时间:2011-12-10
ol_beta 写道 为啥不用entryset直接遍历呢?
Map<String, Object> map = new HashMap<String, Object>(); for (Entry<String, Object> entry : map.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); } 和LZ是一样的。只是语法形势换成心的了 |
|
返回顶楼 | |
发表时间:2011-12-10
一直只是put和get!
|
|
返回顶楼 | |
发表时间:2011-12-10
这是 基本常识
|
|
返回顶楼 | |
发表时间:2011-12-10
liu78778 写道 ol_beta 写道 为啥不用entryset直接遍历呢?
Map<String, Object> map = new HashMap<String, Object>(); for (Entry<String, Object> entry : map.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); } 和LZ是一样的。只是语法形势换成心的了 不知道呃,可能要看看编译过后的结果才知道一不一样,我一直是用entrySet直接遍历的 |
|
返回顶楼 | |
发表时间:2011-12-11
/** * */ import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class HashMapTest { public static void main(String[] args) { Map map=new HashMap(); for(int i=0;i<100000;i++){ map.put(String.valueOf(i), "hello world!"); } long start=System.currentTimeMillis(); Iterator it=map.keySet().iterator(); while(it.hasNext()){ String key=(String) it.next(); map.get(key); } long end=System.currentTimeMillis(); System.out.println("keyset运行时间:"+(end-start)+"ms"); start=System.currentTimeMillis(); it=map.entrySet().iterator(); while(it.hasNext()){ java.util.Map.Entry entry = (java.util.Map.Entry) it.next(); entry.getValue(); } end=System.currentTimeMillis(); System.out.println("entrySet运行时间:"+(end-start)+"ms"); } } keyset运行时间:7ms entrySet运行时间:5ms是有区别 |
|
返回顶楼 | |
发表时间:2011-12-11
zhang_xiujiao 写道 map.values(); 如果你不关注key的话,还可以这样
ps: 第二种不是遍历了两次,而是多hash了一次(效率的差别,主要看key的hashCode具体算法) |
|
返回顶楼 | |