作者awert ( )
看板java
标题Re: [问题] 如何走访PriorityQueue但不移除元素?
时间Thu Mar 29 20:35:25 2012
※ 引述《peanut97 (花生)》之铭言:
: 查了好多资料,包括官方API、google网页,都没有看这样的问题...
: 我想请问:
: 想要把PriorityQueue里面的内容依优先顺序印出来检查一下,
: 但不要把里面的元素移除,该怎麽做?
The Iterator provided in method is not guaranteed to traverse the elements
of the priority queue in any particular order. If you need ordered
traversal, consider using Arrays.sort(pq.toArray()).
所以一般印 collections 的方式都没有办法照你要的顺序印,因为那些方式都是透过
Iterator 来实作的功能。看 PriorityQueue 的 source code,其实会发现它里面其实是
用一个 array 来存物件,只有在用到任何 Queue 的 method 时,他才会去依照
comparator 或 natural order 来调整 array。
至於 Arrays.sort(pq.toArray())的意思是,因为你没有办法透过 iterator 来看,
所以建议你直接把内容copy一份出来,然後再用 Arrays.sort() 排序过後看。
要实作的话,code 大概是这种样子
PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
for (int x : new int[] {9, 5, 3, 7, 6, 1, 8}) {
pq.add(x);
}
Object[] array = pq.toArray();
Arrays.sort(array);
System.out.println(Arrays.toString(array));
: 诚心请教各位前辈...
: 该怎麽检查目前的priorityQueue的元素顺序?
: 以及官方API中,Arrays.sort(pq.toArray())这个奇怪写法是什麽意思?
--
We who cut mere stones must always be envisioning cathedrals.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.27.164.94
※ 编辑: awert 来自: 114.27.164.94 (03/29 20:39)
1F:推 peanut97:谢谢您 原来要先把queue的东西弄成array後再排序 才看得 03/30 13:39
2F:推 peanut97:到 03/30 13:50