web-dev-qa-db-ja.com

パフォーマンスにおける配列とArrayList

Object型の配列とObject型のArrayListのどちらがパフォーマンスが優れていますか?

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

今、私はanimal[10]list.get(10)をしていますが、どちらを高速化する必要がありますか?

54
Spark-Beginner

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

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

65
TwoThe

ここ から:

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


パフォーマンスの点では、ArrayとArrayListは、indexを知っている場合に要素を追加または取得するための一定時間の点で同様のパフォーマンスを提供します。 ArrayListの自動サイズ変更は挿入を少し遅くするかもしれませんが、ArrayとArrayListの両方がJavaの中心概念であり、深刻なJavaプログラマーはArrayとArrayListのこれらの違いに精通している必要があります一般的な配列とリスト。

37
Rahul Tripathi

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

19
Paul Samsotha

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

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

largeの数primitivesを処理している場合、配列はメモリと時間の両方でパフォーマンスが大幅に向上します。

11
user949300

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

10
Ankit Rustagi