在优先级队列中,优先级是比较器还是可比较器的自然顺序?

Posted

技术标签:

【中文标题】在优先级队列中,优先级是比较器还是可比较器的自然顺序?【英文标题】:In a priority queue, which takes precedence, a Comparator or a Comparable's natural ordering? 【发布时间】:2014-01-10 02:48:35 【问题描述】:

如果我有一个具有 Comparator 的 PriorityQueue 和一个实现 Comparable 类的元素类,并且它们的排序冲突,队列将如何处理排序?它会抛出异常还是忽略其中一个排序规则?

【问题讨论】:

【参考方案1】:

如您所见:http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html

优先级队列的元素按照它们的自然顺序排序,或者由队列构建时提供的 Comparator 排序,具体取决于使用的构造函数。

所以,实际上,如果它有一个特殊的Compatator 作为构造时间,那么自然顺序比较(Comparable 接口给出的那个)将被忽略

这是您需要使用的构造函数,以实现我刚才描述的行为:

PriorityQueue(int initialCapacity, Comparator<? super E> comparator)

创建一个具有指定初始容量的 PriorityQueue,根据指定的比较器对其元素进行排序。

【讨论】:

我只能每20分钟发一个问题,1-10后才能接受答案?分钟,这是构建可扩展服务器的完美方式。

以上是关于在优先级队列中,优先级是比较器还是可比较器的自然顺序?的主要内容,如果未能解决你的问题,请参考以下文章

Java数据结构及算法实战系列011:数组实现的优先级队列PriorityQueue

Java数据结构及算法实战系列011:数组实现的优先级队列PriorityQueue

Java数据结构及算法实战系列012:Java队列06——数组实现的优先级阻塞队列PriorityBlockingQueue

Java数据结构及算法实战系列012:Java队列06——数组实现的优先级阻塞队列PriorityBlockingQueue

Java数据结构及算法实战系列012:Java队列06——数组实现的优先级阻塞队列PriorityBlockingQueue

Java Collection - PriorityQueue 优先队列