Java中的类对象实现
问题描述:
请简要介绍一下在此代码中使用compareTo()
函数的功能。它正在执行什么工作。如果我们删除compareTo()
函数,它会给出错误。Java中的类对象实现
我不知道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 ;
}
}
}
答
您正在使用PriorityQueue
进行自然排序。从javaDoc:
基于优先级堆的无限优先级队列。优先级队列的元素根据其自然顺序排序,或者由队列构建时提供的比较器进行排序,具体取决于使用哪个构造函数。优先级队列不允许空元素。 依赖于自然顺序的优先级队列也不允许插入不可比较的对象(这样做可能导致ClassCastException)。
如果你想删除compareTo
(不实现Comparable
),你应该使用PriorityQueue
构造与Comparator
你compareTo
implementetion是x
只是为了后代和y
如果x
是升序等于。
起初它按X的值排序。然后如果X值相等,它按Y的值排序。负号可能影响排序是升序还是降序。 –