1

重複の可能性:
Javaの配列またはリスト。どちらが速いですか?

Javaで単純な配列よりもArrayListを使用する方がはるかに費用がかかりますか?私はたくさんのArrayListを持っていて、いくつかの場所で配列を使用できますが、それらすべてを置き換える手間をかけるべきかどうかわかりません。

具体的には、配列に演算子[]を使用するよりも、ArrayListのgetの方がコストがかかると想像できます。

ありがとう

4

4 に答える 4

3

それは少し高価です。データのサイズが固定されておらず、データを反復処理する以外のことを行う場合は、ArrayList読みやすさとシンプルさを高めるために使用する価値があります。

唯一の例外は、プリミティブ配列が勝つ可能性が高いプリミティブ型の場合です。

于 2013-01-06T02:14:21.727 に答える
2

ドナルド・クヌースは、最適化について次の2つのステートメントを作成しました。

「私たちは小さな効率を忘れるべきです。たとえば、97%の確率で:時期尚早の最適化はすべての悪の根源です」(ウィキペディアから)

つまり、Java配列を使用する必要があることを示すベンチマークがない限り、開発者として役立つものを使用してください。私の意見では、これはArrayListです。

于 2013-01-06T02:15:17.147 に答える
2

一般的に言って、本当に時間に敏感なことをする必要がある場合、vsの使用はArrayListボトルObject[]ネックになることはありません。データベースクエリ、ネットワーク通信、ディスクアクセス、最適化されていないアレイなどは、はるかに悪化します。

ArrayList同期されていないため、特に要素を追加する前にサイズを指定した場合、パフォーマンスは通常、より大幅に低下することはありObject[]ませ

于 2013-01-06T02:15:27.403 に答える
2

アプリケーションのコストの非常に高い割合は、その設計、開発、および保守です。比較すると、アプリケーションの実行コストは通常​​非常に小さいため、心配する価値はありません。したがって、効率について考えるときは、効率と、アプリケーションを維持しなければならない人について考える必要があります(アプリケーションが役立つと仮定します;)

パフォーマンスが問題となるアプリケーションがあるとします。よくある間違いは、パフォーマンスの問題がどこにあるかを推測し、それらを「最適化」することです。このアプローチの問題は、通常、

  • 複雑さを追加します
  • 保守性が低下します。
  • 最大のパフォーマンスのボトルネックを見逃している
  • 違いがほとんどないかまったくないか、パフォーマンスが低下することさえあります。(最後に誰かが私が書いたコードを最適化しようとしたとき、それは50%遅くなりました;)

あなたがする必要があるのは、いくつかの現実的なテストを実行し、特定の測定可能なビジネス要件を超えるパフォーマンスのボトルネックを測定することです。

主要なボトルネックに変更を加えたら、システムを再テストして、システムが本当に役立つことを確認する必要があります。

于 2013-01-06T10:06:54.477 に答える