2017-02-10 4 views
-2

Bitte informieren Sie mich über die Verwendung von compareTo() Funktion in diesem Code. Was ist die Arbeit, die es leistet? Wenn wir die Funktion compareTo() entfernen, wird ein Fehler ausgegeben.Paar Klassenimplementierung in Java

Ich weiß nicht, was ist die Verwendung von compareTo() Funktion und wie es die Implementierung des Codes beeinflusst.

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

Zunächst wird nach dem Wert von X sortiert. Wenn X-Werte gleich sind, wird nach dem Wert von Y sortiert. Das negative Vorzeichen beeinflusst wahrscheinlich, ob die Sortierung aufsteigend oder absteigend ist. –

Antwort

0

Sie verwenden PriorityQueue mit natürlicher Reihenfolge. Von :

Eine unbegrenzte Prioritätswarteschlange basierend auf einem Priorität-Heap. Die Elemente der Prioritätswarteschlange werden in Abhängigkeit von ihrer natürlichen Reihenfolge oder von einem zur Ausführungszeit der Warteschlange bereitgestellten Vergleicher geordnet, abhängig davon, welcher Konstruktor verwendet wird. Eine Prioritätswarteschlange lässt keine Null-Elemente zu. Eine Prioritätswarteschlange, die sich auf die natürliche Reihenfolge stützt, erlaubt auch nicht das Einfügen von nicht vergleichbaren Objekten (dies kann zu einer ClassCastException führen).

Wenn Sie compareTo (und nicht implementiert Comparable) entfernen möchten, sollten Sie Konstruktor PriorityQueue mit Comparator

Ihre compareTo implementetion verwenden nur Nachkomme, um von x und aufsteigend nach y wenn x sind ist gleich.

Verwandte Themen