渣渣平时很少用到这种高大上的类型,今天突然心血来潮试了一下,发现PriorityQueue的toString方法输出的竟然不是规定好的的排序;
import java.util.PriorityQueue;
public class PriorityTest {
public static void main(String[] args) {
PriorityQueue<Integer> queue=new PriorityQueue<>((a,b)->a-b);
queue.add(2);
queue.add(1);
queue.add(3);
queue.add(5);
queue.add(0);
System.out.println(queue);
}
}
输出的结果是
[0, 1, 3, 5, 2]
并不是定义好的比较器规则,于是,我就开始纠结了。。。查了半天也没有发现别人遇到这种问题,大概是我的基础太渣,只有像我这样的渣渣才回遇到这种脑残问题吧。
我又采用迭代器的方式进行取值:
import java.util.PriorityQueue;
public class PriorityTest {
public static void main(String[] args) {
PriorityQueue<Integer> queue=new PriorityQueue<>((a,b)->a-b);
queue.add(2);
queue.add(1);
queue.add(3);
queue.add(5);
queue.add(0);
while (!queue.isEmpty()){
System.out.print(queue.poll()+"\t");
}
}
}
输出结果为:
0 1 2 3 5
这样就突然正常了,我突然想到这是一个最小堆结构,
插入的顺序是这样的,
2
2
/
1
调整顺序后为
1
/
2
1
/ \
2 3
1
/ \
2 3
/
5
1
/ \
2 3
/ \
5 0
顺序调整:
1
/ \
0 3
/ \
5 2
0
/ \
1 3
/ \
5 2
最后输出的是按行进行输出,所以输出的结果为[0, 1, 3, 5, 2],但是如果进行迭代器输出还是正常的。
大概也只有我会遇到这种我问题了。。。