我想在Java中使用PriorityQueue时应该声明为Queue还是PriorityQueue?

Should I declare as Queue or PriorityQueue when I want to use PriorityQueue in Java?

PriorityQueue<Integer> pq = new PriorityQueue<>(); // first

Queue<Integer> pq = new PriorityQueue<>();  // second

我的问题:

哪个更好?我看到很多例子都使用第一个,但我也听说过 program against interface。声明的类型应该尽可能通用。 PriorityQueue 实现 Queue 接口,因此从第二个参数,我们应该使用第二个。

PS: 这个例子与 ArrayList<Integer> list = new ArrayList<>() vs List<Integer> list = new ArrayList<>(),因为我从未见过任何生产代码将第一个用于 ArrayList,而我们总是使用第二个。但是,我确实看到很多例子使用第一个 PriorityQueue.

您应该使用一个足够通用的接口来满足您的需求,而不是强加实现细节,但又要足够具体以适合您的具体用例。

如果您需要一些队列而不使用任何优先级功能(例如,您的代码不使用任何优先级知识),则使用 Queue。这样您就可以在一行中更改实际实现。

如果您的代码使用了优先级功能并依赖它们,那么您绝对应该使用 PriorityQueue,因为 Queue 过于笼统,在调用优先级方法时会导致错误。