2017-02-10 13 views
-2

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 ; 
     } 

    } 
} 
+1

まず、Xの値でソートします。次に、Xの値が等しい場合は、Yの値でソートします。負の符号は、ソートが昇順であるか降順であるかに影響します。 –

答えて

0

自然な順序でPriorityQueueを使用しています。 〜からjavaDoc

優先度ヒープに基づく無制限の優先度キュー。優先順位キューの要素は、自然順序付けに従って、または使用されるコンストラクタに応じて、キュー構築時に提供されるコンパレータによって順序付けられます。優先度キューはnull要素を許可しません。 自然順序付けに依存する優先度キューでも、比較できないオブジェクトを挿入することはできません(ClassCastExceptionが発生する可能性があります)。あなたがcompareToを削除したい(とComparableを実装していない)あなたはComparator

あなたcompareTo implementetionでPriorityQueueのコンストラクタを使用する必要がある場合は

があるyx場合でわずか子孫xによって順と昇順であります等しい。