java - 列表迭代器导致堆分配?

标签 java android

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

for(O o : myArrayList)
{
}

创建一堆堆分配。

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

最佳答案

这个循环,

     for(O o : myArrayList)
     {
     }

转换为:

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

因此,如果您使用此模式,迭代器对象将在堆上分配。

如果你这样写:

     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 参与,因为它只涉及现有对象引用的分配。

关于java - 列表迭代器导致堆分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13325533/

相关文章:

java - 对与并行数组一起运行的双数组进行排序的程序

java - 父类(super class)上 protected 数组的值意外更改

java - 调用返回结果集的方法

android - 从 android 移动 sdk 在 aws 中创建帐户

android - 如何清除 WebView 的登录凭据?

Eclipse 中的 Java/C++ 项目管理?

java - 'Collections.sort(intervals, new Comparator<Interval>() { [...]'是什么意思?

android - 禁用特定应用程序的对讲

java - 无法实例化类 : android. support.v7.widget.SearchView

java - Firestore whereEqualTo、orderBy 和 limit(1) 不起作用