以下哪种方法对性能命中是安全的,假设List的大小很大(可能是1,000个对象)。
i)个
List<String> myList = new ArrayList<String>();
for(int i=0; i <=10; i++){
myList.add(""+i);
}
String[] array = myList.toArray(new String[myList.size()]);
myArrayMethod(array); // this method returns the array - it modifies the content but not size of array.
myListMethod(myList); // this method processes the list.
ⅱ)
List<String> myList = new ArrayList<String>();
for(int i=0; i <=10; i++){
myList.add(""+i);
}
String[] array = new String[myList.size()];
int i = 0;
for(String str : myList){
array[i] = myList.get(i);
i++;
}
myArrayMethod(array); // this method returns the array - it modifies the content but not size of array.
myListMethod(myList); // this method processes the list.
答案 0 :(得分:3)
第一个例子稍微高效,因为它可以在内部使用System.arraycopy()。
然而,与您正在做的其他事情相比,例如创造弦乐,它会产生一点点差异,我建议你做你认为更清楚的事情
答案 1 :(得分:3)
toArray()可读性更高。
如果你看一下源代码toArray方法,你会注意到有一些条件和arraycopy方法。
// ArrayList.class:
public <T> T[] toArray(T[] a) {
if (a.length < size)
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
// System.class
public static native void arraycopy // native method
对于大型数组,arraycopy比手动添加要快得多。我测试了它,我检查了i)和ii)的持续时间
100 000个元素: i)2毫秒 ii)12毫秒
1 000 000个要素: i)10毫秒 ii)65毫秒
答案 2 :(得分:2)
如果是我的代码,我会选择选项1,因为我只是觉得Collections API会比我更好。
答案 3 :(得分:1)
相对而言,它们具有相同的性能特征,因此,使用内置版本
String[] array = myList.toArray(new String[myList.size()]);