如果我有一个由T对象组成的PriorityQueue,并且T有一个compareTo()方法并且实现了可比性,但是我的PriorityQueue也将比较器作为参数,那么我的PriorityQueue将寻求它的排序元素?
换句话说,哪一个决定了对象的优先级? compareTo()方法或提供的比较器?
答案 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方法设置的自然顺序。