この質問の補足として、Javaループの効率(「for」と「foreach」)
簡単な質問があります。拡張されたforループのメモリフットプリントは大きくなりますか、それとも両方とも同じ構造にコンパイルされ、メモリフットプリントが同一になりfor(Object o : collection) { ... }
、読み取り専用操作に常に適したものになりますか?
私が尋ねる理由は、私が取り組んでいるシミュレーターでは、すべてのフレーム(60 /秒)で、描画する面、レイトレーシングなど、配列内の数千のアイテムに対して操作を実行しているためです。ループ
for(Object o : collection) {
o.doSomething();
}
コレクションのメモリコピーを作成する可能性があるようです(以前の読み取りから作成したことを思い出しているようです)。これはほとんどの状況で問題ありませんが、30000レイトレースを1秒間に60回実行した場合は問題ありません。
一方、ループは明らかです
count = collection.size();
for(i = 0; i < count; i++) {
collection[i].doSomething();
}
参照によってすべてを実行し、読みにくいにもかかわらず、フットプリントが比較的小さい(正直なところ、それほど多くはありませんが)
何かアイデアはありますか?
(注:forループの読み取りの難しさの影響は、複数のレイヤーがある場合にのみ明らかです-単一レイヤーのforの場合、ゲインは非常に小さいです。これは経験から言うと...collection[i].property.subcollection[j].row[k].col[l].prop.subtable[m]
特に一部の場合は気が遠くなるでしょうそれらのうち、キャストする必要があるもの:((Type3)((Type2)((Type1)collection[i]).property.subcollection[j].row[k]).col[l].prop).subtable[m]
たとえば。)