Reihenfolge im Vector lässt sich nicht drehen

JavaAnfänger72

Aktives Mitglied
Ohjeee Collections sind kompliziert !!! 🙁
Ich versuche gerade die Reinfolge der Elemente in einem Vecort zu drehen, aber irgendwie
tut sich da nix:

Code:
import java.util.Vector;
import java.util.Comparator;
import java.util.Enumeration;
import java.util.Collections;

class Zahl implements Comparable<Zahl>{
   
    int i;
   
    public Zahl(int i) {
        this.i = i;
    }

    @Override
    public int compareTo(Zahl o) {
        return 0;
    }
   
    int getInt(){
        return i;
    }
}

public class VectorTest {
   
    int i;
   
    public VectorTest(int zahl) {
        this.i = zahl;
    }

    public static void main(String[] args) {
       
        Vector<Zahl> vector = new Vector<Zahl>();

        Zahl x0 = new Zahl(0);
        Zahl x1 = new Zahl(1);
        Zahl x2 = new Zahl(2);
        Zahl x3 = new Zahl(3);
        Zahl x4 = new Zahl(4);
        Zahl x5 = new Zahl(5);
        Zahl x6 = new Zahl(6);
        Zahl x7 = new Zahl(7);
        Zahl x8 = new Zahl(8);
        Zahl x9 = new Zahl(9);
      
        vector.add(x0);      
        vector.add(x1);
        vector.add(x2);      
        vector.add(x3);
        vector.add(x4);      
        vector.add(x5);
        vector.add(x6);      
        vector.add(x7);
        vector.add(x8);      
        vector.add(x9);    

        System.out.println("\nAusgabe:");
        for( Zahl i: vector){
            System.out.print(i.getInt() + " ");
        }
                    
        Comparator<Zahl> comparator = Collections.reverseOrder();
        Collections.sort(vector, comparator);
        System.out.println("\nDie Ausgabe nach dem Sortieren:");

        for(Zahl i: vector){
            System.out.print(i.getInt() + " ");
        }
    }
}

Achja und bitte kein Komment zur Collegtions Vector, ich weiß das dieses veraltet ist und nicht mehr genutzt werden sollte.
 
Du hast deine natürliche Ordnung in der Klasse Zahl nicht implementiert! Das musst du machen, damit das so funktioniert.
Du musst also das hier:
Java:
 public int compareTo(Zahl o) {
        return 0;
    }
mit etwas sinnvollem befüllen.

EDIT: Ich habe gesehen du hast vom Prinzip her die gleiche Frage schon bei deiner Klasse Tiere gestellt. Daher meine Frage an dich: glaubst du dass auf magische Weise deine Klasse schon comparable ist, nur weil du das Interface implementierst?
Per Definition ist sie dann comparable, jedoch solltest du die compareTo Methode nicht stur 0 returnen lassen, sondern diese sinnvoll überschreiben.
Wenn du das nicht machst musst du dir einen Comparator erstellen (hast du eh gemacht), aber dann auch richtig und nicht den natürlichen Comparator deiner Klasse reversed verlangen. Der funktioniert dann nämlich nicht.
 
Zuletzt bearbeitet:
Hey flopalko, also ich war vieleicht etwas ungenau, Entschuldigung, ich wollte es über den Comparator lösen und nicht über die Methode compareTo(), vondaher ist das doch nicht die gleiche Frage oder?
 
Ohjeee Collections sind kompliziert !!! 🙁
Ich versuche gerade die Reinfolge der Elemente in einem Vecort zu drehen, aber irgendwie
tut sich da nix:
Drehen = natürliche Ordnung rückwärts, oder aktuelle Reihenfolge in der Liste, nur andersrum?
Letzteres wäre #java.util.Collections.reverse.

Achja und bitte kein Komment zur Collegtions Vector, ich weiß das dieses veraltet ist und nicht mehr genutzt werden sollte.
Warum benutzt du's dann? 😉

Hey flopalko, also ich war vieleicht etwas ungenau, Entschuldigung, ich wollte es über den Comparator lösen und nicht über die Methode compareTo(), vondaher ist das doch nicht die gleiche Frage oder?
Wenn du es über einen extra Comperator machen willst, solltest du auch einen Implementieren.
#Collections.reverseOrder nutzt intern compareTo (Die du immer richtig implementieren solltest, wenn man sie schon implementiert!).
 
Hey flopalko, also ich war vieleicht etwas ungenau, Entschuldigung, ich wollte es über den Comparator lösen und nicht über die Methode compareTo(), vondaher ist das doch nicht die gleiche Frage oder?
Also: du kannst entweder die parameterlose Methode reverseOrder nehmen (diese nutzt dann die compareTo Methode deiner comparable Klasse) oder du benutzt einen neuen Comparator, den du als Parameter mitgibst.
Von daher ist das schon die gleiche Frage (vom Prinzip her). Schau dir nochmal genau an, wie diese Methoden funktionieren und lies dir auch die Javadoc dazu durch.
 
Vielen Dank für alle Kommentare !!!
Meine Lösung ist nun die Folgende:
Code:
class SortReverse implements Comparator<Zahl> {

    @Override
    public int compare(Zahl i1, Zahl i2){
        return -1;
    }
}

class Zahl implements Comparable<Zahl>{
  
    int i;
  
    public Zahl(int i) {
        this.i = i;
    }

    @Override
    public int compareTo(Zahl o) {
        return 0;
    }
  
    int getInt(){
        return i;
    }
}

public class Vector_Test {
  
    int i;
  
    public Vector_Test(int zahl) {
        this.i = zahl;
    }

    public static void main(String[] args) {
      
        Vector<Zahl> vector = new Vector<Zahl>();

        Zahl x0 = new Zahl(0);
        Zahl x1 = new Zahl(1);
        Zahl x2 = new Zahl(2);
        Zahl x3 = new Zahl(3);
        Zahl x4 = new Zahl(4);
        Zahl x5 = new Zahl(5);
        Zahl x6 = new Zahl(6);
        Zahl x7 = new Zahl(7);
        Zahl x8 = new Zahl(8);
        Zahl x9 = new Zahl(9);
     
        vector.add(x0);     
        vector.add(x1);
        vector.add(x2);     
        vector.add(x3);
        vector.add(x4);     
        vector.add(x5);
        vector.add(x6);     
        vector.add(x7);
        vector.add(x8);     
        vector.add(x9);   

        System.out.println("\nAusgabe:");
        for( Zahl i: vector){
            System.out.print(i.getInt() + " ");
        }
      
        Collections.sort(vector, new SortReverse());
        System.out.println();
        System.out.println("\nDie Ausgabe nach dem Sortieren:");
        for(Zahl i: vector){
            System.out.print(i.getInt() + " ");
        }
    }
}

Ich implementiere die class SortReverse welche das Interfaces
Comparator implementiert.
Aufgrund des Interfaces Comparator deklariere und inizalisiere ich
die Methode compara. Gibt compare -1 zurück wird mein Vector vector
durch den Aufruf Collections.sort(vector, new SortReverse());
absteigend sortiert.
 
Zuletzt bearbeitet:
Soll ich ehrlich sein? Die Lösung ist keinesfalls besser geworden...

Natürliche Ordnung deiner Zahlen ist, das alle genau gleich groß sind.
Ordnung deines SortReverse ist, das die erste Zahl immer kleiner ist, als die zweite.
also compare(1,0) ergibt 0 ist größer und compare(1,1) ergibt 1 ist kleiner (bzw größer)...
 
Ok, jetzt ist es aber hofenlich richtig.
Ich ersetzte die Methode compare durch die nachstehende Methode compare:

Code:
    public int compare(Zahl i1, Zahl i2){
        if (i1.getInt() > i2.getInt()){
            return -1;
        }
        else if (i1.getInt() < i2.getInt()){
            return 1;
        }
        else{
            return 0;
        }
 

Zurück
Oben