请简要介绍一下compareTo()
函数在此代码中的用法。它正在进行的工作是什么。如果我们删除compareTo()
函数,则会出错。
我不知道compareTo()
函数的用途是什么以及它如何影响代码的实现。
import java.util.ArrayList;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.Scanner;
/**
*
* @author rajat
*/
public class ImplementPair {
public static int mod = (int) (1e9+7);
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int k=in.nextInt();
PriorityQueue<Pair> pq=new PriorityQueue<>();
for(int i=0;i<n;i++){
int x=in.nextInt();
pq.add(new Pair(x, i+1));
System.out.println("prior "+pq);
}
for(int i=0;i<k;i++){
Pair p=pq.poll();
System.out.println("prior "+pq);
pq.add(new Pair(p.x-1, p.y));
System.out.println("prior "+pq);
}
}
static class Pair implements Comparable<Pair>{
long x,y,i;
Pair (long x,long y){
this.x=x;
this.y=y;
}
public int compareTo(Pair o) {
if(this.x!=o.x)
{
System.out.println(-Long.compare(this.x,o.x));
return -Long.compare(this.x,o.x);
}
else
return Long.compare(this.y,o.y);
//return 0;
}
@Override
public String toString() {
return x + " " + y ;
}
}
}
答案 0 :(得分:0)
您正在使用PriorityQueue
自然排序。来自javaDoc:
基于优先级堆的无界优先级队列。优先级队列的元素根据其自然顺序排序,或者由队列构造时提供的比较器排序,具体取决于使用的构造函数。优先级队列不允许null元素。 依赖自然排序的优先级队列也不允许插入不可比较的对象(这样做可能会导致ClassCastException)。
如果您要删除compareTo
(并且不要实现Comparable
),则应使用PriorityQueue
的构造函数Comparator
compareTo
实施只是x
的后代顺序,y
如果x
等于values-sw420dp
则按升序排列。