小编Cha*_*ong的帖子

在AbstractCollection的toArray方法的实现中,代码的用法是什么

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)

我不明白上面代码的用法.我怀疑代码用于避免在调用方法时更改大小.所以我有两个问题:

  1. 我怀疑是对还是错?如果它错了,这段代码的用法是什么?
  2. 如果这是真的,在调用方法时,什么情况可以改变大小?

java collections

11
推荐指数
1
解决办法
258
查看次数

为什么需要在ArrayList的构造中将类型转换为Object数组?

  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数组就完全没问题了.

java collections

8
推荐指数
1
解决办法
1054
查看次数

标签 统计

collections ×2

java ×2