首先,您永远不应该对性能做出假设。你需要测量它。我刚刚证明了我的“感觉”是错误的。我很确定ArrayList
vs的性能Object[]
非常具有可比性。使用initialCapacity
set,ArrayList
只是对数组的简单包装。这些包装方法肯定是由 JVM 内联的。
原来我错了。我写了一个简单的测试来得到一些实数。在我的机器(Oracle Java 7 64bit,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
GC 在测试期间没有运行String[]
,但在int[]
测试期间它运行了大约 25 次。
然而,复制ArrayList
到Object[]
只是为了排序没有意义:
14.98ms Collections.sort(list)
15.32ms Arrays.sort(list.toArray(new String[list.size()]));