2011-08-09 9 views
0

メモリ使用量とナビゲート速度(foreach、getAt())に関して、ArrayList<SimpleObject>ArrayList<ComplexObject>のパフォーマンスが異なるのだろうか?どうして?特定の型はArrayListのパフォーマンスに影響しますか?

ありがとう、

+2

質問を明確にすることはできますか?現時点ではそれほど意味がありません。 –

+0

あなたの質問をもう一度見て..?その何も有効でないことを求める... – ngesh

+0

彼はArrayListとArrayListを意味すると思います

答えて

2

あなたが探している質問はあまり明確ではありませんが、だから私はあなたが探しているものについていくつかの仮定をしました。

リストに使用されているメモリの問題がある場合は、ArrayListによって管理されているオブジェクトの実際のサイズによって異なります。 SimpleObjectComplexObjectsと比較して軽い場合、ヒープで消費されるメモリは後者の方が高くなります。ただし、リストにはヒープ上の実際のオブジェクトへの参照のみが含まれているため、アレイリストで消費される実際のメモリは、同じ数のオブジェクトのarraylistsに対してほぼ一定です。

ランタイムパフォーマンスのトピックでは、これは呼び出されるメソッドによって異なります。 get(int index)およびadd(E element)のようなメソッドは、使用されている型に関係なく、常に同じ実行時パフォーマンス特性を持ちます。これは、メソッドの性質によるものです。その動作は、リストにあるObjectの型に依存しません。

一方、indexOf(Object object)のパフォーマンスは、方法がどのように実装されているかによって異なります。簡単なケースでは、equals()の実装がSimpleObjectの場合、ComplexObjectよりも速く実行されると仮定すると、indexOfがの場合よりも速く実行されることを推測することは容易です。

ArrayListメソッドの実行中にメモリ消費が懸念される場合、ほとんどのメソッドがオブジェクトの参照を処理するので、それは異なるものではありません。 toArray()のような例外は、ComplexObjectの場合よりもSimpleObjectのメモリが少なくて済みます。

+0

toArray()の "ComplexObjectよりもSimpleObjectのメモリが多い"のはなぜですか? –

+0

それは逆です。私の間違い。編集します。 –

2

いいえ、パフォーマンスの違いはありません。これを説明するには、2つの非常に単純な引数があります:ArrayListがしか参照および参照は事は、彼らが指すがいかに複雑に関係なく、常に同じ大きさではないハンドル

  • ジェネリックは、本質的に、実行時に一方がArrayList<SimpleObject>であり、他方がArrayList<ComplexObject>であるという情報が利用できないであることを意味消去を使用して実装され、それらは実行時にだけArrayListオブジェクトです。
1

ArrayList()に格納されているものは単なるオブジェクト参照であり、メモリではないため違いはありません。どのような種類のクラスを入れても問題ありません。したがって、クラスのパフォーマンスに支障はなく、小クラスのパフォーマンスは向上しません。

関連する問題