3

私は次のことを認識しています。

1 次元配列と arraylist のどちらかを選択する場合、1 つの主な例外を除いて、常に arraylist を選択することをお勧めします。プリミティブ値を収集し、効率が問題になる場合。ArrayList は内部で配列を使用するため、オブジェクト型で操作を実行する場合、(処理時間とメモリ フットプリントの点で) 高いパフォーマンスは配列に似ています。ただし、ArrayList ではすべての要素をオブジェクト (Integer や Long など) でラップする必要があるため、int や long などのプリミティブ型を操作すると、ArrayList のパフォーマンスが低下します。オートボクシングはラップとアンラップに必要なコードの量を減らしますが、ラッパー オブジェクトがまだ作成されているため、パフォーマンスの問題は解消されません。

しかし、プリミティブ値を収集し、効率が問題になる実際の例を探しています。一つ思いつきますか?

4

5 に答える 5

1

または、doubleの行列またはベクトルがあり、それらを何らかの方法で合計/集計したい数学。ここでは、多くの値があるため、開梱のオーバーヘッドが大きくなります。

于 2012-04-12T18:11:27.147 に答える
1

科学。時間間隔ごとに一定数のデータ値を収集する 1 つ以上のセンサーを持つことは非常に一般的です。たとえば、ミリ秒ごとに温度を収集する何百もの温度計を考えてみてください。

于 2012-04-12T18:06:11.540 に答える
0

ただし、配列を使用する理由はそれだけではありません。

固定サイズのインデックス可能なコレクションが必要な場合は常に、配列がより自然な選択です。たとえば、IPv4アドレスを格納する場合、バイト配列ではなくリストにバイトを格納するのは厄介です。パフォーマンスの面ではおそらく問題ではありませんが。

そしてジェネリックスが導入される前は、配列は型の安全性を保証する唯一の方法でした。

効率が重要な例を探している場合は、ソケット/ファイルI/O以外の何物でもありません。配列の代わりにリストをバッファとして使用すると、まったく効果がありません。

于 2012-04-12T18:10:49.600 に答える
0

通常、アルゴリズムを実装している間、人々は整数などではなく int/float で作業します。したがって、配列が最適な選択です。さらに効率が上がります。

より非技術的な観察:

人々は、学校や大学で最初に C を学ぶことからプログラミングを始めます (一般的な観察... 100% のケースでは有効ではありません)。問題を解決するために配列を使用するという考え方は私たちの脳に組み込まれており、私たちは配列を試してみる傾向があります。

于 2012-04-12T18:14:50.080 に答える
0

バイト バッファを作成するときはいつでも配列を使用しました。構造体の正確なサイズがわかっている場合 (おそらくバッファーの場合と同様)、コレクションではなく配列を使用する方がはるかに簡単で高速です。

于 2012-04-12T18:16:58.393 に答える