私は最初のゲームをAndroidで書いていますが、ゲームの最適化に関する長時間のプレゼンテーションを見た後、割り当てを確認しています。 for(Object o:m_arrayList)のための暗黙的なイテレータを作成するときに、ArrayListを作成したものとは別に、すべてのゲーム内の割り当てを取り除くことができました。JavaでのArrayListイテレータの割り当てを防止する
私のゲームオブジェクト、AIエンティティなどはすべて使いやすさのためにこれらに格納されているので、これらの繰り返し/割り当てはかなり少ないです。
私のオプションは何ですか?
私は、理論的には賢明なupperboundsを指定し、配列を使用していますが、私はArrayListに、そのような存在としての機能を好きなことは、クリーンでシンプルなコードを維持削除できます。
ArrayListをオーバーライドし、それが使用されるたびに新しいイテレータタイプを割り当てるのではなく、クラスメンバーを返すiterator()の独自の実装を提供します。
私は使いやすさのためにオプション2に行くことを好むだろうが、私は少しこれを持っていたし、問題に遭遇した。誰も私が上記のオプション2で説明したものの例を持っていますか?私はジェネリッククラスから継承する際に問題を抱えていましたが、明らかに型の衝突がありました。
これに対する2番目の質問は、これらの割り当てを避けるための他のオプションがありますか?
そして、私は、ArrayListが特定の量(ctorまたはシフト可能な値のいずれかで指定された)のメモリスロットを事前に割り当てているかどうか知っていますか、あなたはその範囲内にとどまりますか?クリア()後も?
ありがとうございました。申し訳ありませんがありますが、この情報は多くの人に役立つと思います。
私はテスト/プロファイリングの言及はありません。これは実際にパフォーマンスのボトルネックですか? – Thomas
あなたのボーナスの質問ごとに、初期容量パラメータなしで構築されたArrayListは、最初にリスト内の10個のオブジェクトのためのスペースを割り当て、必要に応じて初期容量で増加します。スペースを節約するために 'trimToSize'を呼び出すことができます。 – Pedantic
ボーナスに関する質問では、ArrayListはデフォルトで10の容量を割り当てます。 @sthomasoverflow.com/a/4666050/340068 –