???

huangqibing0626 2009-12-19 10:35:09
package hqb;

import java.util.*;
public class C163 {
public static void main(String[] args) {
PriorityQueue<String> pq = new PriorityQueue<String>();

pq.add("carrot");
pq.add("apple");
pq.add("banana");
System.out.println(pq);
/*Iterator it=pq.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}*/
System.out.println(pq.poll() +":" + pq.peek());
}
}


调试结果:[apple, carrot, banana]
apple:banana
我认为结果应该是:[apple, banana,carrot]
apple:banana
等待高手释疑!

...全文
77 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wibnmo 2009-12-20
  • 打赏
  • 举报
回复
试过了。。结果却实令人很疑惑。对PriorityQueue不太熟。
楼主要实现什么功能吗?换成List一样的效果。

import java.util.*;

public class C163 {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();

list.add("carrot");
list.add("apple");
list.add("banana");
Collections.sort(list);
System.out.println(list);
}
}
huangqibing0626 2009-12-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ilovechinatoo 的回复:]
System.out.println(pq);
这句实际上调用了pq的toString()方法,而所有collection的toString()方法都是按照迭代器依次返回各个元素的字符串表现形式,而迭代器并不保证以特定的顺序遍历优先级队列中的元素。如果需要按顺序遍历,请考虑使用 Arrays.sort(pq.toArray());
(最后一句是API文档说的,建议多参照文档。)
[/Quote]

那要顺序遍历,该如何添加代码啊?Arrays.sort(pq.toArray());返回的是void。
誰伴我闖荡 2009-12-20
  • 打赏
  • 举报
回复
顶~~~~
IloveChinatoo 2009-12-20
  • 打赏
  • 举报
回复
System.out.println(pq);
这句实际上调用了pq的toString()方法,而所有collection的toString()方法都是按照迭代器依次返回各个元素的字符串表现形式,而迭代器并不保证以特定的顺序遍历优先级队列中的元素。如果需要按顺序遍历,请考虑使用 Arrays.sort(pq.toArray());
(最后一句是API文档说的,建议多参照文档。)
groovy2007 2009-12-20
  • 打赏
  • 举报
回复
优先队列内部一般不是按顺序存放的,只有队首的元素是优先级最高的那个,其余元素并未按顺序记录,只是在poll之后,才取出下一个优先级最高的元素,放在队首。
huangqibing0626 2009-12-20
  • 打赏
  • 举报
回复
一道scjp题而已,开始并不知道迭代器并不保证以特定的顺序遍历优先级队列中的元素。谢谢大家的回答!
三米 2009-12-19
  • 打赏
  • 举报
回复
我也搞不懂哦,按说应该是按照自然排序的。不过我调换了一下代码顺序 结果竟然变啦,难道PriorityQueue<E>中另有玄机? 期待高手解决 附上我调换后的代码
import java.util.*;
public class C163 {
public static void main(String[] args) {
PriorityQueue<String> pq = new PriorityQueue<String>();

pq.add("apple");
pq.add("banana");
pq.add("carrot");

System.out.println(pq);
Iterator it=pq.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
System.out.println(pq.poll() +":" + pq.peek());
}
}



[apple, banana, carrot]
apple
banana
carrot
apple:banana
bawgiitx 2009-12-19
  • 打赏
  • 举报
回复
先占位,再看题~
wibnmo 2009-12-19
  • 打赏
  • 举报
回复
先搬一沙发慢慢看。。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧