Java的foreach效率 [英] Java foreach efficiency

查看:254
本文介绍了Java的foreach效率的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  Map< String,String> myMap = ...; (字符串键:myMap.keySet()){
System.out.println(key);


System.out.println(myMap.get(key));



$ b $ myMap.keySet() foreach循环中调用一次?
我想是的,但是想要你的意见。

我想知道如果以这种方式使用foreach( myMap.keySet ())对性能有影响,或者相当于这个:

  Set< String> keySet = myMap.keySet(); 
for(String key:keySet){
...
}


解决方案

如果你想完全确定,那么编译它并反编译并比较。我做了这个与以下来源︰

  public void test(){
Map< String,String> myMap = new HashMap< String,String>(); (字符串键:myMap.keySet()){
System.out.println(key);


System.out.println(myMap.get(key));
}

Set< String> keySet = myMap.keySet();
for(String key:keySet){
System.out.println(key);
System.out.println(myMap.get(key));






当我用 Jad ,我得到:

  public void test()
{
Map myMap = new HashMap();
字符串键;
for Iterator iterator = myMap.keySet()。iterator(); iterator.hasNext(); System.out.println((String)myMap.get(key)))
{
key =(String)iterator.next();
System.out.println(key);
}

Set keySet = myMap.keySet();
字符串键;
for Iterator iterator1 = keySet.iterator(); iterator1.hasNext(); System.out.println((String)myMap.get(key)))
{
key =(字符串)iterator1.next();
System.out.println(key);




$ b $ p $所以你有答案。它用for循环形式调用一次。


I have something like this:

Map<String, String> myMap = ...;

for(String key : myMap.keySet()) {
   System.out.println(key);
   System.out.println(myMap.get(key)); 
}

So is myMap.keySet() called once in the foreach loop? I think it is, but want your opinion.

I would like to know if using foreach in this way (myMap.keySet()) has a performance impact or it is equivalent to this:

Set<String> keySet = myMap.keySet();
for (String key : keySet) {
   ...
}

解决方案

If you want to be absolutely certain, then compile it both ways and decompile it and compare. I did this with the following source:

public void test() {
  Map<String, String> myMap = new HashMap<String, String>();

  for (String key : myMap.keySet()) {
    System.out.println(key);
    System.out.println(myMap.get(key));
  }

  Set<String> keySet = myMap.keySet();
  for (String key : keySet) {
    System.out.println(key);
    System.out.println(myMap.get(key));
  }
}

and when I decompiled the class file with Jad, I get:

public void test()
{
    Map myMap = new HashMap();
    String key;
    for(Iterator iterator = myMap.keySet().iterator(); iterator.hasNext(); System.out.println((String)myMap.get(key)))
    {
        key = (String)iterator.next();
        System.out.println(key);
    }

    Set keySet = myMap.keySet();
    String key;
    for(Iterator iterator1 = keySet.iterator(); iterator1.hasNext(); System.out.println((String)myMap.get(key)))
    {
        key = (String)iterator1.next();
        System.out.println(key);
    }
}

So there's your answer. It is called once with either for-loop form.

这篇关于Java的foreach效率的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆