为什么优先队列的元素默认按照自然顺序排序,即使它没有实现Comparable接口?
从文档中可以看到,元素是根据自然顺序进行排序的,但我找不到任何关于equals方法或comparable的说明。它是如何在内部实现的?
所有已实现的接口:Serializable、Iterable、Collection、Queue。
如果它实现了Comparable接口,为什么在上面的行中没有提到?
示例:
第三个打印语句输出的是[1, 3, 2, 4],而不是[1, 2, 3, 4]。为什么会这样呢?应该是自然排序,对吧?
从文档中可以看到,元素是根据自然顺序进行排序的,但我找不到任何关于equals方法或comparable的说明。它是如何在内部实现的?
所有已实现的接口:Serializable、Iterable、Collection、Queue。
如果它实现了Comparable接口,为什么在上面的行中没有提到?
示例:
public static void main(String[] args) {
PriorityQueue<String> pq = new PriorityQueue<String>();
pq.add("2");
pq.add("4");
System.out.println(pq); //prints [2, 4]
pq.offer("1");
System.out.println(pq); // prints [1, 4, 2]
pq.add("3");
System.out.println(pq); // prints [1, 3, 2, 4]
}
}
第三个打印语句输出的是[1, 3, 2, 4],而不是[1, 2, 3, 4]。为什么会这样呢?应该是自然排序,对吧?
E
需要实现Comparable
或者定义一个Comparator
,文档中已经明确说明了这一点。为什么PriorityQueue
需要实现Comparable
? - Thomas Jungblut