列表迭代器会导致堆分配吗?

时间:2012-11-10 19:52:50

标签: java android

我正在分析我的安卓游戏并惊讶地看到:

for(O o : myArrayList)
{
}

创建一堆堆分配。

除了使用数字i++ for循环外,有没有更好的方法来解决这个问题?我可以预先分配我的迭代器吗?

1 个答案:

答案 0 :(得分:4)

这个循环,

     for(O o : myArrayList)
     {
     }

转换为:

     for(Iterator<O> iter = myArrayList.iterator(); iter.hasNext(); )
     {
        O o = iter.next();
     }

如果使用这种模式,那么Iterator对象将在堆上分配。

如果你这样写:

     O o = null;
     for(Iterator<O> iter = myArrayList.iterator(); iter.hasNext(); )
     {
        o = iter.next();
     }

    O o = null;
    Iterator<O> iter = myArrayList.iterator();
    while(iter.hasNext()){
        o = iter.next();
    }  

然后我认为GC没有太多参与迭代,因为它只涉及现有对象引用的分配。