通过我提出的一个问题,我发现将一个列表中的元素复制到一个数组我只需要使用方法 toArray()。
但是假设我有一个包含 n 对象的List。我想将其复制到一个大小为 n + 1 的数组中,并在第一个位置添加另一个对象,在另一个 n 中添加 n 数据列表。
这就是我现在这样做的方式,但我只是想知道是否有更好的方法来做到这一点:
Object array[] = new Object[list.size() + 1];
Object chk = new Object();
array[0] = chk;
for(int i = 1; i < array.length; i++){
array[i] = list.get(i);
}
答案 0 :(得分:2)
您可以使用LinkedList并使用offerFirst()然后使用toArray(),但我怀疑它真的很重要。
答案 1 :(得分:2)
使用迭代器:
...
int i = 1;
for(Object item:list){
array[i] = item;
i++;
}
答案 2 :(得分:1)
我不明白你想要实现的目标,但如果我理解正确的问题,我就会这样做:
List<Object> elementList = new ArrayList<Object>();
Object additionalElement = new Object();
Object array[] = null;
//[Add code to populate the List]
//Add the additional element
elementList.add(0,additionalElement);
array = elementList.toArray();
这样做的好处就是不迭代任何东西。
答案 3 :(得分:0)
如果你正在寻找一种方法来避免不得不遍历阵列和列表,我认为你运气不好。 Java没有提供一种大规模复制的方法,除了那些只使用API调用的方法,这些API调用在视图中隐藏视图之外的集合循环。
答案 4 :(得分:0)
没有循环的唯一方法是:
Object array[] = new Object[list.size() + 1];
Object oldValues[] = list.toArray();
Object chk = new Object();
array[0] = chk;
System.arrayCopy(oldValues, 0, array, 1, oldValues.length);
System.arrayCopy
比循环快一点(不是太多,但速度更快),尽管性能提升可能会被toArray
缓解,具体取决于List的实现。
总而言之,只要List.get(int)
是可接受的成本,你所拥有的就是一种体面的方法。 (如果它是O(n),你的操作最终会得到O(n ^ 2),这在Frank的解是O(n)时是不理想的。)