具有ArrayList和ArrayList对的Java优先级队列

具有ArrayList和ArrayList对的Java优先级队列,java,sorting,arraylist,priority-queue,Java,Sorting,Arraylist,Priority Queue,我正在寻找用Java构建优先级队列的简单方法。我构建了一个数组列表,每个对实例都包含一个X和Y值 类对{ 私人最终浮动xVal; 私人最终浮动yVal; 公共对(浮动aXVal、浮动aYVal){ xVal=aXVal; yVal=aYVal; } 公共浮点getX(){ 返回xVal; } 公共浮球{ 返回yVal; } } 我的ArrayList看起来像: ArrayList<Pair> listOfPoints; 我想这已经接近我想要的了 我试图实现以下目标: Priori

我正在寻找用Java构建优先级队列的简单方法。我构建了一个
数组列表
,每个
实例都包含一个
X
Y

类对{
私人最终浮动xVal;
私人最终浮动yVal;
公共对(浮动aXVal、浮动aYVal){
xVal=aXVal;
yVal=aYVal;
}
公共浮点getX(){
返回xVal;
}
公共浮球{
返回yVal;
}
}
我的
ArrayList
看起来像:

ArrayList<Pair> listOfPoints;
我想这已经接近我想要的了

我试图实现以下目标:

PriorityQueue<Pair> xSorted = new PriorityQueue<Pair>(numOfPoints, (x1,x2) -> Need Help Here);
PriorityQueue xSorted=newpriorityqueue(numOfPoints,(x1,x2)->此处需要帮助;
我如何访问该对以使其比较
x1
x2

注意,
nummberOfPoints
I设置为基于
xVal
的自然(升序)顺序的
ArrayList-listOfPoints

PriorityQueue pq=newpriorityqueue(Comparator.comparingDouble(Pair::getX));
对于基于
xVal
的反向(降序)顺序:

PriorityQueue pq=newpriorityqueue(Comparator.comparingDouble(Pair::getX.reversed());

您可以对
yVal
或任何其他类似字段使用相同的方法,方法是使用。

如果您不想让Pair类实现Comparator接口,也可以像这样使用lambda

PriorityQueue queue=newpriorityqueue(5,(p1,p2)->Float.compare(p1.getX(),p2.getX());
对于反向顺序:

PriorityQueue queue=newpriorityqueue(5,(p1,p2)->Float.compare(p2.getX(),p1.getX());
如果您更喜欢静态工厂方法或实用程序函数中的比较逻辑,可以使用如下内容:

PriorityQueue queue=newpriorityqueue(NodeUtil::customCompare);
公共静态int customCompare(对p1,对p2){
返回Float.compare(p1.getX(),p2.getX());
}

Hi我提供了该链接作为参考,它下面的代码块就是我在该链接中发现的有用的代码块。我想要的是在优先级队列中使用的lambada表达式,因为知道我使用的是类,而不是
PntPair
构造函数不会为
Pair
类编译。请将您的问题和格式设置好。您的数组列表应该是
list listOfPoints
了解如何在上使用它,但不确定如何在我的类上使用lambada表达式。我想访问对X1和对X2,并将优先级队列按比较中最小的X值排序。太棒了,谢谢!我要试一试。比较器能否在浮点值上运行?请参阅答案中提供的比较器API链接。有不同的comparingX方法,所以,是的,它可以比较浮动。
PriorityQueue<Pair> xSorted = new PriorityQueue<Pair>(numOfPoints, (x1,x2) -> Need Help Here);