Java ArrayList副本而不创建新数组

时间:2014-05-24 07:48:44

标签: java memory collections arraylist copy

我有一个带有底层数组的List实现(不是我的)。

实现不直接访问数组,只能通过实现的LIST INTERFACE方法(就像ArrayList实现一样)

在某些时候,我将无法使用此列表(因为它的实现),但我将需要访问(只读)数据(底层数组)。

有没有办法实现这一目标?是否可以使用旧的基础数组创建新的ArrayList而不创建ARRAY COPY

2 个答案:

答案 0 :(得分:2)

无论如何,您将不得不拥有一个新数组来支持ArrayList - 那么为什么它会调用c.toArray()这个问题?唯一的低效率是如果它在调用Arrays.copyOf的分支中结束。

答案 1 :(得分:1)

ArrayList(int)也创建一个数组

public ArrayList(int initialCapacity) {
   ...
   this.elementData = new Object[initialCapacity];
}

但ArrayList(Collection)使用快速复制

public Object[] toArray() {
    return Arrays.copyOf(elementData, size);
}