まず第一に、パフォーマンスについて決して仮定を立てるべきではありません。あなたはそれを測定する必要があります。私は自分の「感覚」が間違っていることを証明しました。ArrayList
vsのパフォーマンスはObject[]
非常によく似ていると確信していました。initialCapacity
set を使用ArrayList
すると、配列の単純なラッパーになります。そして、これらのラッパー メソッドは、JVM によって確実にインライン化されます。
私が間違っていたことが判明しました。実数を取得する簡単なテストを作成しました。私のマシン(Oracle Java 7 64ビット、Linux)では、数字は次のとおりです。
ArrayList write: 105.8ms
String[] write: 39.8ms
ArrayList read: 64.1ms
String[] read: 40.9ms
そのArrayList
ため、 では約 100% 遅くなり、 ではset()
50% 遅くなりますget()
。
それはオートボクシングが開始されていませんでした。また、 vsでテストを実行します。ArrayList<Integer>
int[]
ArrayList<Integer> write: 2660.0ms
int[] write: 27.5ms
ArrayList<Integer> read: 59.5ms
int[] read: 20.2ms
String[]
GC はテスト中に実行されませんでしたが、テスト中にint[]
約 25 回実行されました。
ArrayList
それにもかかわらず、ソートするためだけにコピーするObject[]
のは意味がありません:
14.98ms Collections.sort(list)
15.32ms Arrays.sort(list.toArray(new String[list.size()]));