Поскольку ArrayList.addAll
реализован для использования Collection.toArray
следующим образом:
public boolean addAll(Collection<? extends E> c) {
Object[] a = c.toArray();
int numNew = a.length;
ensureCapacityInternal(size + numNew); // Increments modCount
System.arraycopy(a, 0, elementData, size, numNew);
size += numNew;
return numNew != 0;
}
А PriorityQueue.toArray
- это просто операция копирования базового массива:
public Object[] toArray() {
return Arrays.copyOf(queue, size);
}
Таким образом, addAll
вставит элементы очереди в соответствии с их порядком в поле queue
, которое представляет собой сбалансированную двоичную кучу, которая сохраняет порядок элементов в виде дерева, а не списка. Вы получаете необработанный массив, представляющий дерево, а не отсортированный список.