LinkedList实现addAll为什么要先转成Array

JDK7中的LinkedList中的addAll会先将要添加的Collection做toArray转化,然后在去迭代toArray后的数组进行添加操作,为什么不直接迭代Collection呢?难道只为了多线程下直接迭代Collection会有异常而进行这样的转化吗?
JDK7的代码如下:
[code="java"]
public boolean addAll(int index, Collection<? extends E> c) {
checkPositionIndex(index);

    Object[] a = c.toArray();
    int numNew = a.length; 
    if (numNew == 0)
        return false;

    Node<E> pred, succ;
    if (index == size) {
        succ = null;
        pred = last;
    } else {
        succ = node(index);
        pred = succ.prev;
    }

    for (Object o : a) {
        @SuppressWarnings("unchecked") E e = (E) o;
        Node<E> newNode = new Node<>(pred, e, null);
        if (pred == null)
            first = newNode;
        else
            pred.next = newNode;
        pred = newNode;
    }

    if (succ == null) {
        last = pred;
    } else {
        pred.next = succ;
        succ.prev = pred;
    }

    size += numNew;
    modCount++;
    return true;
}

[/code]

这样是为了避免在putAll过程中Collection的内容又发生了改变。除了多线程外,还有一种可能是,你传入的Collection的内容又间接依赖了正在被putAll的list。