【发布时间】:2020-05-26 07:12:56
【问题描述】:
在将元素从 PriorityQueue 传输到 ArrayList 时,我注意到 List.add 和 List.addAll 的行为不同。但我不知道为什么。
示例代码:
public static void main(String[] args) {
PriorityQueue<String> heap = new PriorityQueue<>(Comparator.reverseOrder());
heap.add("a");
heap.add("aa");
heap.add("aaa");
ArrayList<String> listAddAll = new ArrayList<>();
listAddAll.addAll(heap);
System.out.println(listAddAll);
ArrayList<String> listAdd = new ArrayList<>();
while (!heap.isEmpty()){
listAdd.add(heap.remove());
}
System.out.println(listAdd);
}
listAddAll 包含 [aaa, a, aa],而 listAdd 包含 [aaa, aa, a]。我希望两者都是后者,因为这是比较器指定的顺序。
【问题讨论】:
-
对不起,我的错,看错了。
-
你观察到的不是
add和addAll之间的区别,而是traversing the queue和反复调用remove()之间的区别。
标签: java collections priority-queue