【发布时间】:2011-04-14 12:27:02
【问题描述】:
大家好
我一直在研究如何实现和使用 Java PriorityQueue。
我需要的队列必须能够比较两种不同类型对象的优先级。
我找到并阅读了这篇PriorityQueue 文章,但没有提及是否可以比较两种不同类型的对象。
不知道有没有可能?
谢谢
冈劳格
【问题讨论】:
标签: java data-structures priority-queue comparable
大家好
我一直在研究如何实现和使用 Java PriorityQueue。
我需要的队列必须能够比较两种不同类型对象的优先级。
我找到并阅读了这篇PriorityQueue 文章,但没有提及是否可以比较两种不同类型的对象。
不知道有没有可能?
谢谢
冈劳格
【问题讨论】:
标签: java data-structures priority-queue comparable
根据 Java 1.6 的 API,you can provide a Comparator to the PriorityQueue constructor。此外,您可以让队列对象的类实现Comparable 接口,该接口定义了一个compareTo 方法,用于比较对象。
【讨论】:
由于Object 是最通用的类并且是所有事物的超类,您可以实现自己的Comparator <Object>,将您的队列声明为PriorityQueue <Object>,并将您的比较器传递给队列的构造函数。
【讨论】:
codeComparator
Comparator <Object>,它将按照自己的规则比较对象,那么您的类可能会也可能不会实现Comparatable <Object> - 对于队列,没有区别,比较完全是交付给您全新的比较器。
new PriorityQueue(int, Comparator) 创建PriorityQueue,那么比较将由您的Comparator 完成,您已传递给队列构造函数,并且队列不会担心对象类型- 只要你Comparator 能够处理它。但是,如果您将使用不需要Comparator 的其他PriorityQueue 构造函数,那么元素将根据它们的自然顺序 进行排序——通过Comparable 接口中的compareTo 方法.在这种情况下,他们必须实现Comparable,否则您的队列将在add 上抛出ClassCastException。