71

Object型のArrayとObject型のArrayListはどちらが性能が良いですか?

Animalオブジェクトの配列:Animal animal[] と arraylist があるとします:ArrayList list<Animal>

今私はやっていますが animal[10]list.get(10) どちらがより速く、なぜですか?

4

5 に答える 5

81

array[10] が array.get(10) よりも高速であることは明らかです。後者は内部で同じ呼び出しを行いますが、関数呼び出しと追加のチェックのオーバーヘッドが追加されます。

ただし、最新の JIT はこれをある程度最適化するため、非常にパフォーマンスが重要なアプリケーションがあり、これがボトルネックであると測定されている場合を除き、これについて心配する必要はほとんどありません。

于 2013-10-15T20:05:19.497 に答える
37

ここから:

ArrayList は、Java の Array によって内部的にサポートされています。ArrayList のサイズ変更操作には、新しい配列の作成と古い配列から新しい配列へのコンテンツのコピーが含まれるため、パフォーマンスが低下します。


パフォーマンスに関しては、 index がわかっている場合、Array と ArrayList は、要素を追加または取得するための一定時間に関して同様のパフォーマンスを提供します。ArrayList の自動サイズ変更により、挿入が少し遅くなる可能性がありますが、Array と ArrayList はどちらも Java のコア概念であり、本格的な Java プログラマーは、Array と ArrayList の違い、またはより一般的な Array と List の違いに精通している必要があります。

于 2013-10-15T19:42:14.333 に答える
21

Array または ArrayList を使用することを決定するとき、最初の本能は実際にはパフォーマンスについて心配する必要はありませんが、パフォーマンスは異なります。最初に懸念することは、配列のサイズを事前に知っているかどうかです。そうでない場合は、当然、機能のためだけに配列リストを使用します。

于 2013-10-15T19:45:45.767 に答える
11

最近削除された誰かの投稿に同意します。パフォーマンスの違いは非常に小さいため、ごくわずかな例外を除いて (彼は決してそうではないと言いました)、それに基づいて設計上の決定を下すべきではありません。

要素がオブジェクトであるあなたの例では、パフォーマンスの違いは最小限に抑える必要があります。

多数プリミティブを扱っている場合、メモリと時間の両方で配列の方がパフォーマンスが大幅に向上します。

于 2013-10-15T20:07:31.923 に答える
10

配列はパフォーマンスが優れています。ArrayList は、パフォーマンスを犠牲にして「削除」などの追加機能を提供します。

于 2013-10-15T19:41:09.553 に答える