使用列表数据填充一个数组,并添加一个元素

时间:2010-05-03 15:01:46

标签: java list arrays copy

通过我提出的一个问题,我发现将一个列表中的元素复制到一个数组我只需要使用方法 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);
    }

5 个答案:

答案 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)时是不理想的。)