メモリ使用量とナビゲート速度(foreach、getAt())に関して、ArrayList<SimpleObject>
とArrayList<ComplexObject>
のパフォーマンスが異なるのだろうか?どうして?特定の型はArrayListのパフォーマンスに影響しますか?
ありがとう、
メモリ使用量とナビゲート速度(foreach、getAt())に関して、ArrayList<SimpleObject>
とArrayList<ComplexObject>
のパフォーマンスが異なるのだろうか?どうして?特定の型はArrayListのパフォーマンスに影響しますか?
ありがとう、
あなたが探している質問はあまり明確ではありませんが、だから私はあなたが探しているものについていくつかの仮定をしました。
リストに使用されているメモリの問題がある場合は、ArrayList
によって管理されているオブジェクトの実際のサイズによって異なります。 SimpleObject
がComplexObjects
と比較して軽い場合、ヒープで消費されるメモリは後者の方が高くなります。ただし、リストにはヒープ上の実際のオブジェクトへの参照のみが含まれているため、アレイリストで消費される実際のメモリは、同じ数のオブジェクトのarraylistsに対してほぼ一定です。
ランタイムパフォーマンスのトピックでは、これは呼び出されるメソッドによって異なります。 get(int index)
およびadd(E element)
のようなメソッドは、使用されている型に関係なく、常に同じ実行時パフォーマンス特性を持ちます。これは、メソッドの性質によるものです。その動作は、リストにあるObjectの型に依存しません。
一方、indexOf(Object object)
のパフォーマンスは、方法がどのように実装されているかによって異なります。簡単なケースでは、equals()
の実装がSimpleObject
の場合、ComplexObject
よりも速く実行されると仮定すると、indexOf
がの場合よりも速く実行されることを推測することは容易です。
ArrayList
メソッドの実行中にメモリ消費が懸念される場合、ほとんどのメソッドがオブジェクトの参照を処理するので、それは異なるものではありません。 toArray()
のような例外は、ComplexObject
の場合よりもSimpleObject
のメモリが少なくて済みます。
toArray()の "ComplexObjectよりもSimpleObjectのメモリが多い"のはなぜですか? –
それは逆です。私の間違い。編集します。 –
いいえ、パフォーマンスの違いはありません。これを説明するには、2つの非常に単純な引数があります:ArrayList
がしか参照および参照は事は、彼らが指すがいかに複雑に関係なく、常に同じ大きさではないハンドル
ArrayList<SimpleObject>
であり、他方がArrayList<ComplexObject>
であるという情報が利用できないであることを意味消去を使用して実装され、それらは実行時にだけArrayList
オブジェクトです。ArrayList()に格納されているものは単なるオブジェクト参照であり、メモリではないため違いはありません。どのような種類のクラスを入れても問題ありません。したがって、クラスのパフォーマンスに支障はなく、小クラスのパフォーマンスは向上しません。
質問を明確にすることはできますか?現時点ではそれほど意味がありません。 –
あなたの質問をもう一度見て..?その何も有効でないことを求める... – ngesh
彼はArrayListとArrayListを意味すると思います –