0

プリミティブ配列を使用し、それを再構築して次のような新しい要素を追加すると、パフォーマンスに違いがあるかどうかを知りたいです。

AnyClass[] elements = new AnyClass[0];

public void addElement(AnyClass e) {
    AnyClass[] temp = new AnyClass[elements.length + 1];
    for (int i = 0; i < elements.length; i++) {
        temp[i] = elements[i];
    }
    temp[elements.length] = e;
    elements = temp;
}

または、ArrayListを使用して要素を追加するだけの場合。

ArrayListがプリミティブ配列で行ったのと同じ方法で構築されているため、同じ速度なのか、それとも実際に違いがあり、再構築してもプリミティブ配列は常に高速なのか、私が尋ねる理由は定かではありません要素を追加するたびに?

4

7 に答える 7

5

ArrayList も同様の方法で機能しますが、制限に達するたびに容量が 2 倍になるたびに再構築するのではありません。したがって、配列の再作成はかなり遅いため、常にそれに追加している場合、ArrayLists の方が高速になります。したがって、頻繁に追加しない場合、実装で使用するメモリが少なくなる可能性がありますが、速度に関する限り、ほとんどの場合遅くなります。

于 2013-10-30T18:17:07.150 に答える
2

ArrayList がサイズ変更されると、それ自体が 2 倍になるため、毎回サイズ変更するのに時間を無駄にすることはありません。償却済み、つまり、サイズ変更に時間がかからないことを意味します。そのため、車輪の再作成に時間を費やすべきではありません。最初のプラットフォームを作成した人は、プラットフォームをより効率的にする方法をすでに学んでおり、プラットフォームについてあなたよりもよく知っています。

于 2013-10-30T18:16:31.240 に答える
1

一言で言えば、固執しArrayListます。それは:

  • 広く理解されています。
  • よくテストされています。
  • おそらく、独自の実装よりもパフォーマンスが高くなります(たとえば、一定時間償却ArrayList.add()されることが保証されていますが、メソッドはそうではありません)。
于 2013-10-30T18:15:07.253 に答える
1
  • Arrays と ArrayList の両方にパフォーマンスの問題はありません。
  • 配列と ArrayList はインデックス ベースであるため、どちらも同じように機能します。
  • 動的配列が必要な場合は、arrayList を使用できます。
  • 配列サイズが静的な場合は、配列を使用します。
于 2013-10-30T18:18:05.367 に答える
0

ArrayListあなたの実装は、速度の点で Java に明らかに負ける可能性があります。Java の ArrayList は、再割り当てが必要になる前に何らかの「バッファ」を用意して最適化しようとしますが、要素を追加するたびに配列を再割り当てすることは、特にコストがかかります。

于 2013-10-30T18:16:58.007 に答える