【问题标题】:Should I declare as Queue or PriorityQueue when I want to use PriorityQueue in Java?当我想在 Java 中使用 PriorityQueue 时,我应该声明为 Queue 还是 PriorityQueue?
【发布时间】:2021-08-05 07:14:02
【问题描述】:
PriorityQueue<Integer> pq = new PriorityQueue<>(); // first

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

我的问题:

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

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

【问题讨论】:

    标签: java interface queue priority-queue


    【解决方案1】:

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

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

    如果你的代码使用了优先级特性并且依赖于它们,那么你肯定应该使用PriorityQueue,因为Queue会过于笼统,在调用优先级方法时会导致错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 2016-03-09
      相关资源
      最近更新 更多