public Object[] toArray() {
// Estimate size of array; be prepared to see more or fewer elements
Object[] r = new Object[size()];
Iterator<E> it = iterator();
for (int i = 0; i < r.length; i++) {
if (! it.hasNext()) // fewer elements than expected
return Arrays.copyOf(r, i);
r[i] = it.next();
}
return it.hasNext() ? finishToArray(r, it) : r;
}
Run Code Online (Sandbox Code Playgroud)
这是AbstractCollection.toArray方法的实现代码.
if (! it.hasNext()) // fewer elements than expected
return Arrays.copyOf(r, i);
Run Code Online (Sandbox Code Playgroud)
我不明白上面代码的用法.我怀疑代码用于避免在调用方法时更改大小.所以我有两个问题:
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
size = elementData.length;
// c.toArray might (incorrectly) not return Object[] (see 6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
}
Run Code Online (Sandbox Code Playgroud)
代码是java.util.ArrayList的构造.你可以查看bug 6260652的详细信息,这里http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6260652
我的问题是,如果我不转换类型,会发生什么问题?因为我认为如果elementData引用subType数组就完全没问题了.