对PriorityQueue使用比较器和单独的compareTo方法

时间:2012-11-30 02:57:08

标签: java priority-queue comparator compareto

如果我有一个由T对象组成的PriorityQueue,并且T有一个compareTo()方法并且实现了可比性,但是我的PriorityQueue也将比较器作为参数,那么我的PriorityQueue将寻求它的排序元素?

换句话说,哪一个决定了对象的优先级? compareTo()方法或提供的比较器?

4 个答案:

答案 0 :(得分:3)

对于标准PriorityQueue,如果使用Comparator<T>构造它,则将确定优先级。如果没有,那么Comparable<T>将确定它。这在PriorityQueue API

中都有详细描述

答案 1 :(得分:3)

构造函数的comparator参数的文档说明了

  

comparator - 用于对此优先级队列进行排序的比较器。如果为null,则顺序取决于元素的自然顺序。

这意味着当指定comparator时,compareTo方法建立的自然顺序将被忽略。

答案 2 :(得分:1)

我正在阅读PriorityQueue类的source code for Oracle's implementation,它会检查是否正在使用比较器并首先使用它。否则,它使用Comparable对象。

答案 3 :(得分:0)

Comparable定义集合中类的自然顺序,而Comparator允许您提供不同的顺序。如果您决定提供不同的比较器,它将覆盖自然顺序。如果不输入比较器,它将恢复为compareTo方法设置的自然顺序。