【问题标题】:How to create a array of PriorityQueues [duplicate]如何创建优先队列数组[重复]
【发布时间】:2017-10-05 10:29:36
【问题描述】:

我正在编写一个需要优先队列数组的算法。我可以得到类似的东西吗:

public double[][] distance_table = new double[300][300];

使用优先队列?我试过了:

public PriorityQueue<Double>[] queue_table = new PriorityQueue<>(300, comparator)[300];

但是 Netbeans 说:

需要数组,但已找到 PriorityQueue。

它有一个错误图标,所以它不是警告。

【问题讨论】:

  • 数组和泛型不能很好地混合。您可以使用List&lt;List&lt;PriorityQueue&lt;Double&gt;&gt;&gt;,例如ArrayLists
  • 您确定不需要 PriorityQueue 的 PriorityQueue 吗?
  • 是的,我想要一个数组,因为我想为每个顶点创建一个队列。我有 300 个顶点,对于每个顶点,我想创建一个队列,其中包含到其余顶点的距离。制作 PriorityQueues 的 priorityQueue 只是使我认为的代码复杂化 对于每个顶点(数组的索引),我将对队列进行 const 访问等于 1。

标签: java arrays priority-queue


【解决方案1】:

您不能像您所展示的那样创建类类型的数组: 在您的情况下,您可以执行以下操作:

PriorityQueue<Double> queue_table[] = new PriorityQueue[10];
for(int i=0;i<queue_table.length;i++){
   queue_table[i] = new PriorityQueue<>(300, comparator);            
}

这里我们首先声明一个 PriorityQueue 类型的数组,而不是初始化它。然后我们使用循环来初始化它的元素。

【讨论】:

  • 嗯.. 很有趣。出于好奇,为什么我不能声明数组的类型?我的意思是单线。
  • 这就是我们在 Java 中处理对象数组的方式。有关更多信息,您可以访问:docs.oracle.com/javase/specs/jls/se7/html/jls-10.html
  • 好吧,我只是忘记了如何用 Java 编写代码 :) 但这似乎是合乎逻辑的。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 2013-11-13
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多