我正在分析我的安卓游戏并惊讶地发现:
for(O o : myArrayList)
{
}
Run Code Online (Sandbox Code Playgroud)
创建一堆堆分配.
除了使用数字i++for循环,还有更好的方法来解决这个问题吗?我可以预先分配我的迭代器吗?
这个循环,
for(O o : myArrayList)
{
}
Run Code Online (Sandbox Code Playgroud)
转换为:
for(Iterator<O> iter = myArrayList.iterator(); iter.hasNext(); )
{
O o = iter.next();
}
Run Code Online (Sandbox Code Playgroud)
因此,如果使用此模式,迭代器对象将在堆上分配。
如果你这样写:
O o = null;
for(Iterator<O> iter = myArrayList.iterator(); iter.hasNext(); )
{
o = iter.next();
}
Run Code Online (Sandbox Code Playgroud)
或者
O o = null;
Iterator<O> iter = myArrayList.iterator();
while(iter.hasNext()){
o = iter.next();
}
Run Code Online (Sandbox Code Playgroud)
GC那么我认为迭代中不会有太多参与,因为它只涉及现有对象引用的分配。
| 归档时间: |
|
| 查看次数: |
544 次 |
| 最近记录: |