如何在线性时间内使用自定义比较器构建优先队列

Bub*_*pot 7 java heap performance priority-queue

在PriorityQueue的构造函数中,我们可以传入一个像List或Set这样的集合,在线性时间内构建PriorityQueue。但是,这也意味着 PriorityQueue 将使用默认的 Comparator。

我想使用自己的比较器,因此除了最小堆之外,我还可以拥有其他东西。我能想到的唯一方法是将集合包装在 SortedSet 中并在其中放置一个自定义比较器。

有没有其他好的方法来做到这一点?

Ser*_*ner 0

假设你有一个 A 类(或一个 pojo),其中有一个int priority;字段保存该对象及其 getter 的优先级,getPriority() 那么你将拥有如下所示的内容:

 Queue<A> queue = new PriorityQueue<>(
                    4 //initialCapacity
                 , new Comparator<A>() {
                public int compare(A p1, A p2) {
                    return Integer.valueOf(p1.getPriority()).compareTo(p2.getPriority());
                }
            });
Run Code Online (Sandbox Code Playgroud)