我有一个带有底层数组的List实现(不是我的)。
实现不直接访问数组,只能通过实现的LIST INTERFACE方法(就像ArrayList实现一样)
在某些时候,我将无法使用此列表(因为它的实现),但我将需要访问(只读)数据(底层数组)。
有没有办法实现这一目标?是否可以使用旧的基础数组创建新的ArrayList而不创建ARRAY COPY ?
答案 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);
}