Java中的对类实现

时间:2017-02-10 20:10:13

标签: java sorting

请简要介绍一下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 ;
        }

    } 
}

1 个答案:

答案 0 :(得分:0)

您正在使用PriorityQueue自然排序。来自javaDoc

  

基于优先级堆的无界优先级队列。优先级队列的元素根据其自然顺序排序,或者由队列构造时提供的比较器排序,具体取决于使用的构造函数。优先级队列不允许null元素。 依赖自然排序的优先级队列也不允许插入不可比较的对象(这样做可能会导致ClassCastException)。

如果您要删除compareTo(并且不要实现Comparable),则应使用PriorityQueue的构造函数Comparator

compareTo实施只是x的后代顺序,y如果x等于values-sw420dp则按升序排列。