我想为以下类的对象创建一个优先级队列(最大堆)
data class Tuple(val column: Column, var count: Int)
其中Column
为
data class Column(val name: String, val dataType: String)
我编写了下面的代码,用自定义比较器示例化上述类对象的优先级队列,如下所示:
val compareByCount: Comparator<Tuple> = compareByDescending { it.count }
val pq = PriorityQueue<Tuple>(compareByCount)
当我填充PriorityQueue
并执行pq.peek()
时,它返回计数最低的Tuple
对象。为什么会这样呢?尽管我提供了一个比较器,它根据降序进行检查。
2条答案
按热度按时间rkue9o1l1#
根据我的理解,
compareByDescending
应该对count
最大的元素和堆的开头进行排序。但是,由于这不是给你预期的结果,也许你可以试试这个:
或者更简单,无需自定义比较器:
这将以相反的顺序将元素添加到堆中,即
compareByDescending
pgvzfuti2#
对于最大堆使用
compareBy
对于最小堆使用compareByDescending
最小优先级队列示例:
最大优先级队列示例: