我正在尝试将项目从优先级队列中复制到ArrayList
。出于某种原因,当有三个或四个项目时,它会在向列表中添加两个项目后停止。
如果有5
项,则在将3
项复制到列表后会停止。我做错了什么?
PriorityQueue<T> queue= new PriorityQueue<T> () ;
List<T> list = new ArrayList<T>();
for (int i = 0 ; i< queue.size(); i++)
{
list.add(0, queue.poll());
}
答案 0 :(得分:4)
请尝试以下代码:
import java.util.*;
import java.lang.*;
import java.io.*;
class Main{
public static void main (String[] args) {
PriorityQueue<Integer> queue = new PriorityQueue<>();
queue.add(5);
queue.add(4);
queue.add(3);
queue.add(2);
queue.add(1);
List<Integer> list = new ArrayList<>();
while(!queue.isEmpty()) {
list.add(0,queue.poll());
}
System.out.println(list); // Prints [5, 4, 3, 2, 1]
}
}
一个例子:
for
为什么import org.apache.spark.ml.linalg.{Matrix, Vectors, Vector}
import org.apache.spark.ml.stat.Correlation
import org.apache.spark.sql.Row
import scala.collection.Seq
object BasicStatistics {
def main(args: Array[String]): Unit = {
val data: Seq[Vector] = Seq(
Vectors.sparse(4, Seq((0, 1.0), (3, -2.0))),
Vectors.dense(4.0, 5.0, 0.0, 3.0),
Vectors.dense(6.0, 7.0, 0.0, 8.0),
Vectors.sparse(4, Seq((0, 9.0), (3, 1.0))))
val df = data.map(Tuple1.apply).toDF("features")
val Row(coeff1: Matrix) = Correlation.corr(df, "features").head
println(s"Pearson correlation matrix:\n $coeff1")
val Row(coeff2: Matrix) = Correlation.corr(df, "features", "spearman").head
println(s"Spearman correlation matrix:\n $coeff2")
}
}
循环不起作用:
考虑迭代1:i = 0且i&lt;
queue.size()= 5 queue = {5,4,3,2,1} list = {}
迭代1之后:
queue = {5,4,3,2} list = {1} i = 1
在迭代2:i = 1 i&lt; queue.size()= 4 queue = {5,4,3,2} list = {1}
迭代2之后:queue = {5,4,3} list = {1,2} i = 2
在迭代3:i = 2 i&lt; queue.size()= 3 queue = {5,4,3,2} list = {1}
迭代3之后:queue = {5,4} list = {1,2,3} i = 3
在迭代4:i = 3 i&lt; queue.size()= 3? =&gt;假
退出循环!
所以当你仍然在队列= {5,4}时你要退出for循环并且所有的元素都没有被添加到列表中。
答案 1 :(得分:-2)
你正在轮询元素,这意味着你要从队列中删除它们,而你想迭代它。
我建议你使用
queue.peek()
代替。
答案 2 :(得分:-2)
ArrayList有一个接受Collection的构造函数。 PriorityQueue实现Collection。您不需要遍历队列。
PriorityQueue<T> queue= new PriorityQueue<T>();
List<T> list = new ArrayList<T>(queue);