insertAll 方法
override
在此列表的 index
位置插入 iterable
中的所有对象。
这会增加列表的长度,并将所有后续对象移向列表末尾。
列表必须是可增长的。 index
值必须是非负数且不大于 length。
final numbers = <int>[1, 2, 3, 4];
final insertItems = [10, 11];
numbers.insertAll(2, insertItems);
print(numbers); // [1, 2, 10, 11, 3, 4]
实现
void insertAll(int index, Iterable<E> iterable) {
RangeError.checkValueInInterval(index, 0, length, "index");
if (index == length) {
addAll(iterable);
return;
}
if (iterable is! EfficientLengthIterable || identical(iterable, this)) {
iterable = iterable.toList();
}
int insertionLength = iterable.length;
if (insertionLength == 0) {
return;
}
// There might be errors after the length change, in which case the list
// will end up being modified but the operation not complete. Unless we
// always go through a "toList" we can't really avoid that.
int oldLength = length;
for (int i = oldLength - insertionLength; i < oldLength; ++i) {
add(this[i > 0 ? i : 0]);
}
if (iterable.length != insertionLength) {
// If the iterable's length is linked to this list's length somehow,
// we can't insert one in the other.
this.length -= insertionLength;
throw ConcurrentModificationError(iterable);
}
int oldCopyStart = index + insertionLength;
if (oldCopyStart < oldLength) {
setRange(oldCopyStart, oldLength, this, index);
}
setAll(index, iterable);
}