Java自然排序
我试图使用priorityqueue,我假设元素是按“自然顺序”添加的 当我打印元素时,它不是按排序的顺序。我希望结果是-1,2,3,4Java自然排序,java,Java,我试图使用priorityqueue,我假设元素是按“自然顺序”添加的 当我打印元素时,它不是按排序的顺序。我希望结果是-1,2,3,4 package scratch; import java.util.*; public class test { public static void main(String[] args) { PriorityQueue<String> pq = new PriorityQueue<String>();
package scratch;
import java.util.*;
public class test {
public static void main(String[] args) {
PriorityQueue<String> pq = new PriorityQueue<String>();
pq.add("2");
pq.add("4");
System.out.println(pq.peek()+" ");
pq.offer("1");
pq.add("3");
System.out.println(pq);
/*System.out.println(pq.poll() + " ");
System.out.println(pq);*/
}
}
包装划痕;
导入java.util.*;
公开课考试{
公共静态void main(字符串[]args){
PriorityQueue pq=新的PriorityQueue();
pq.添加(“2”);
pq.添加(“4”);
System.out.println(pq.peek()+);
资格预审报价(“1”);
pq.添加(“3”);
系统输出打印项次(pq);
/*System.out.println(pq.poll()+);
系统输出打印项次(pq)*/
}
}
输出:
二,
[1,3,2,4]优先级队列的字符串表示形式并不反映其中元素的顺序,它完全基于队列的迭代顺序(这是
抽象集合中定义toString()
的方式,优先级队列
也使用此实现). 从链接的文档中:
迭代器不会以任何特定顺序返回元素
从
中提供的迭代器
方法迭代器()不能保证遍历
任何特定顺序的优先级队列。如果需要有序遍历,
考虑使用数组。排序(pq.toAlayle())。
因为您使用的是在AbstractCollection
中定义的toString()
public String toString() {
Iterator<E> it = iterator();
if (! it.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = it.next();
sb.append(e == this ? "(this Collection)" : e);
if (! it.hasNext())
return sb.append(']').toString();
sb.append(',').append(' ');
}
}
公共字符串toString(){
迭代器it=迭代器();
如果(!it.hasNext())
返回“[]”;
StringBuilder sb=新的StringBuilder();
某人附加(“[”);
对于(;;){
E=it.next();
附加(e==这个?”(这个集合):e);
如果(!it.hasNext())
返回sb.append(']').toString();
某人附加(‘,’)。附加(‘’);
}
}
在Java中,PriorityQueue
只保证按特定顺序删除(获取)元素。使用迭代器浏览内部可以是任意顺序
方法Iterator()中提供的迭代器不保证以任何特定顺序遍历优先级队列的元素。如果需要有序遍历,请考虑使用数组。排序(pq.toAlayle())。
和PriorityQueue
从AbstractCollection
继承toString()
方法,如源代码所示:
使用迭代器构造字符串
public String toString() {
Iterator<E> i = iterator();
if (! i.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = i.next();
sb.append(e == this ? "(this Collection)" : e);
if (! i.hasNext())
return sb.append(']').toString();
sb.append(", ");
}
}
印刷品
1 2 3 4
此类及其迭代器实现集合和迭代器接口的所有可选方法。方法Iterator()中提供的迭代器不保证以任何特定顺序遍历优先级队列的元素。如果您需要有序遍历,请考虑使用数组。排序(pq.toAlayAy)(.q/to>)>可能的副本,但这并不能解释为什么<代码> toStrug()/<代码>按它的方式工作。毕竟,OP在代码中的任何地方都没有直接使用迭代器。
1 2 3 4