ListQueue<E>.from 构造函数

ListQueue<E>.from(
  1. Iterable elements
)

创建一个包含所有 elementsListQueue

元素按照 elements.iterator 顺序添加到队列中,就如同使用 addLast 方法一样。

所有 elements 应该是 E 的实例。该可迭代 elements 本身可以具有任何元素类型,因此这个构造函数可以用于向下转型 Queue,例如

Queue<SuperType> superQueue = ...;
Queue<SubType> subQueue =
    ListQueue<SubType>.from(superQueue.whereType<SubType>());

示例

final numbers = <num>[10, 20, 30];
final queue = ListQueue<int>.from(numbers);
print(queue); // {10, 20, 30}

实现

factory ListQueue.from(Iterable<dynamic> elements) {
  if (elements is List<dynamic>) {
    int length = elements.length;
    ListQueue<E> queue = ListQueue<E>(length + 1);
    assert(queue._table.length > length);
    for (int i = 0; i < length; i++) {
      queue._table[i] = elements[i] as E;
    }
    queue._tail = length;
    return queue;
  } else {
    int capacity = _INITIAL_CAPACITY;
    if (elements is EfficientLengthIterable) {
      capacity = elements.length;
    }
    ListQueue<E> result = ListQueue<E>(capacity);
    for (final element in elements) {
      result.addLast(element as E);
    }
    return result;
  }
}