[solved] Vector sortieren (Collection / Comparable?)

Status
Nicht offen für weitere Antworten.

w00t

Aktives Mitglied
Hallo,

also ich habe folgendes Problem:

Ich habe eine Klasse (Channel). Diese enthält eine menge Variablen.

Ich lese Daten aus, erzeuge mit denen jeweils eine Klasse Channel und füge die Klasse dann einem Vector hinzu (Vector <Channel> cList)

Nun muss ich den Vector sortieren.
Da ich einen PHP code in Java umsetzten will, habe ich dort die Function "usort".

Dazu einen kleinen Algorithmus den ich auch schon in Java umgesetzt habe.
Hier mal ein kleiner Ausschnitt:

PHP
Code:
[ ... Liste erzeugen, channel erzeugen und der liste hinzufügen ... ]

 function cmp ($a, $b) {
   if ($a["order"] == $b["order"]) {
     return ($a["channelid"] < $b["channelid"]) ? -1 : 1;
   }//return 0;
   return ($a["order"] < $b["order"]) ? -1 : 1;
  }
  usort($channelList, "cmp");
  return $channelList;
}
Die Funktion "cmp" ist in der Funktion enthalten die die Channel erzeugt etc.

Nun habe ich erstmal die Funktion "cmp" in Java umgeschrieben (ein bisschen sauberer):

Java
Code:
	public int cmp(Channel a, Channel  b){
		int xOrder = 0;
		if (a.getOrder() == b.getOrder()){
			xOrder = (a.getId() < b.getId()) ? -1 : 1;
		} else {
			xOrder = (a.getOrder() < b.getOrder()) ? -1 : 1 ;
		}

		return xOrder;
	}

Dieser Code ist eine eigene Methode. Sie ist in der gleichen Klasse enthalten wo die Methode zum Liste erzeugen/channel erzeugen etc. ist.

Nun habe ich gelesen man soll Vectoren mit Comparable sortieren. Nun,... ich hab keine Ahnung wie ich das machen soll, so das ich die "Regeln" der oben genannten Methode "cmp" benutze.

getOrder() ist eine Methode die einen int zurück liefert. Das gleiche bei getId().


Wenn ich Comparable in meine Klasse "Channel" implementiere
Code:
public class Channel implements Comparable<Channel> {
dann muss ich ja eine neue Methode hinzufügen:
Code:
	public int compareTo(Channel o) {
		// TODO Auto-generated method stub
		return 0;
	}

So, da ich mittlerweile keine Idee mehr habe wie ich das o.g. umsetzte .. brauche ich Hilfe und wende mich deshalb an euch.
Hoffe es war verständlich geschrieben was ich möchte. Falls ich noch ein bisschen Code posten soll oder sonst Fragen dazu beantworten soll, nur her damit :)
 
G

Gast

Gast
mach die Methode static und für sie in compareTo aus
oder schreib den inhalt der cmp einfach ins compareTo.

dann kannst du mit Collections.sort den Vector sortieren
 

w00t

Aktives Mitglied
Daran habe ich auch gedacht, aber da fehlt mir irgendwie eins:

Wenn ich nun die Methode "cmp"in meine andere Methode (compareTo()) einfüge, was ist denn dann die Variable b? Ich habe doch nur die eine Klasse Channel "a", aber die Channel sind ja an und für sich unabhängig voneinander. Die kennen ja die anderen Channel gar nicht.

Ich glaub ich hab nen riesigen Denkfehler bei dem ganzen Comparable zeug :(

Kannst Du mir vielleicht ein Beispiel geben wie ich das mit dem Collections.sort(cList) und dem Comparable mache? Steht total auf dem Schlauch.
 

ARadauer

Top Contributor
Code:
 public int compareTo(Channel o) { 
      // TODO Auto-generated method stub 
      return 0; 
   }
a wäre in diesem fall this
also das aktuelle objekt und b wäre das o

Comparable heißt Vergleichbar, ich bin das objekt und irgendwer gibt mir ein anders objekt o und sagt: vergleiche dich damit, compare
 

ARadauer

Top Contributor
alernativ kannst du dir auch einen seperaten comperator machen. Also ich vergleiche nichts mit mir sondern ich bin an und für sich ein Vergleicher und verleiche zwei Objekte.

Code:
public class Test implements Comparator<String> {	


	public int compare(String o1, String o2) {
	 //hier dein zeugs
		return 0;
	}
}
in diesem Fall gibst du dem sort von Collections zusätzlich eine Instanz des Comperators mit
 

w00t

Aktives Mitglied
(Das jetzt zu deinem 1. beitrag)

Also müsste in der Klasse Channel das hier stehen:

Code:
	public int compareTo(Channel o) {
		int xOrder = 0;
		if (this.getOrder() == o.getOrder()){
			xOrder = (this.getId() < o.getId()) ? -1 : 1;
		} else {
			xOrder = (this.getOrder() < o.getOrder()) ? -1 : 1 ;
		}
		return xOrder;
	}


Und nachdem ich alles in die Liste eingefügt habe .. das hier:

Code:
// Liste erzeugen etc. pp.

Collections.sort(cList);
 

ARadauer

Top Contributor
also wenn this id kleiner ist als o id dann -1 , ja das müsste passen.
und sie muss natürlich das Interface implementieren
Code:
public class Channel  implements Comparable<Channel> {
damit Collections.sort(cList); weiß, dass es die Elemente sortieren kann
 

w00t

Aktives Mitglied
Ok, vielen Dank :)
Scheint zu klappen.

Nur hab ich gerade irgendwo ne Endlosschleife (liegt aber net am sortieren^^), da das ja nicht so performant ist, muss ich da mal suchen *lach*
//EDIT:
Schon scheiße wenn man nen i mit ner 1 austauscht .. dann kann die schleife ja nur endlos werden :oops:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Java 8 Sicherheitswarnung abschalten [solved] Allgemeine Java-Themen 1
M [Solved] StringIndexOutOfBoundsException Allgemeine Java-Themen 1
D [SOLVED] Collection wird nicht richtig per Konstruktor übernommen Allgemeine Java-Themen 8
V [solved]Von Java Prog über ein JSP/Servlet auf DB zugreifen Allgemeine Java-Themen 3
W [Solved] RegEx (Text ersetzten mit gefundenem - $id) Allgemeine Java-Themen 2
W String.substring und UTF-16-Konformität [solved] Allgemeine Java-Themen 5
M [SOLVED]MVC, einmalige aktionen Allgemeine Java-Themen 7
A [SOLVED] Classpath und statische Variablen Allgemeine Java-Themen 6
A Vector Strings in Array splitten Allgemeine Java-Themen 6
G Fehler mit Vector Allgemeine Java-Themen 3
M String Array Vector komprimieren und verschicken Allgemeine Java-Themen 3
P Vectorelemente in einen anderen Vector kopieren Allgemeine Java-Themen 12
U Vector aus Oberklasse spezialisieren Allgemeine Java-Themen 2
R Vector in JList Allgemeine Java-Themen 11
M Cast double[]-->Object[] oder Vector<double[]> Allgemeine Java-Themen 3
R Threads korrekte Synchronisation bei Vector und ArrayList Allgemeine Java-Themen 6
H Index Out of Bounds bei Vector Allgemeine Java-Themen 4
H Java Vector Frage Allgemeine Java-Themen 9
E NetBeans Vector durch ArrayList ersetzen Allgemeine Java-Themen 4
C Vector/Point-Problem Allgemeine Java-Themen 3
M Buffer-Vector einzeln und zusammen synchronisieren Allgemeine Java-Themen 4
B Suchalgorithmus der Klasse Vector Allgemeine Java-Themen 5
X Vector Allgemeine Java-Themen 3
S 2D Vector speziell ausgeben. Allgemeine Java-Themen 2
S Vector in Vector gespeichert, wie greift man darauf zu? Allgemeine Java-Themen 3
C Swing JTable Vector aus DB adden Allgemeine Java-Themen 3
R Vector.clear() oder neu initialisieren Allgemeine Java-Themen 3
S vector & strings Allgemeine Java-Themen 26
X Vector in Intervall-Menge umwandeln Allgemeine Java-Themen 4
D Array oder Vector in Enum Deklarieren Allgemeine Java-Themen 3
J Erweiterte For-Schleife mit Vector Allgemeine Java-Themen 5
G JComponent in Vector - wie klonen? Allgemeine Java-Themen 7
V Performancefrage int-Vector/Stack Allgemeine Java-Themen 10
N HashMap<String,Vector<String>> a = new HashMap<String,Vector<String>>(); Allgemeine Java-Themen 4
H GUI: RectangleDrawer - zu viele Elemente im Vector für die paint-Methode Allgemeine Java-Themen 6
S JList in Vector Allgemeine Java-Themen 3
I Vector mit Objekten sortieren,Videos mit JMF wiedergeben Allgemeine Java-Themen 6
MQue Vector<..> nicht verwenden Allgemeine Java-Themen 4
H Vector<Character> zu char[] castern Allgemeine Java-Themen 2
T Element aus Vector entfernen Allgemeine Java-Themen 4
Spot84 Vector nach Ressourcetyp sortieren Allgemeine Java-Themen 4
M get Funktion von Vector Allgemeine Java-Themen 4
N wie greife ich auf hashmap in vector zu Allgemeine Java-Themen 9
V NullPointerException bei Vector Allgemeine Java-Themen 2
E einfache Frage zu Vector Allgemeine Java-Themen 8
K Serialisierung von Hashmap in Vector Allgemeine Java-Themen 3
G Vector beim Initialisieren befüllen Allgemeine Java-Themen 4
G Vector addAll Allgemeine Java-Themen 5
B sorteiren von Datein nach Zeitstempel in einem Vector Allgemeine Java-Themen 5
MQue Vector Allgemeine Java-Themen 7
F Vector in eine Datenbank speichern? Allgemeine Java-Themen 3
P Vector auf JTree Allgemeine Java-Themen 6
P dynamisches Array / Vector Allgemeine Java-Themen 2
P JTable/Vector Allgemeine Java-Themen 5
T Vector und remove? Allgemeine Java-Themen 13
T Vector in JAVA ? Allgemeine Java-Themen 10
P Vector in vielen Klassen Allgemeine Java-Themen 21
MQue Vector implementieren Allgemeine Java-Themen 2
MQue Vector<State> Allgemeine Java-Themen 2
O hilfe bei Vector frage Allgemeine Java-Themen 6
F Synchronisation + Vector/ArrayList/LinkedList Allgemeine Java-Themen 7
Z Elemente in Vector nach Häufigkeit sortieren. Allgemeine Java-Themen 13
H java.util.Vector langsam ? Allgemeine Java-Themen 5
H Vector<T>[] vecs = new Vector<T>[10]; geht nicht Allgemeine Java-Themen 2
N Java API java.util.vector Allgemeine Java-Themen 3
G Vector erweitern Allgemeine Java-Themen 4
S Vector sortieren nach Objekt-Info? Allgemeine Java-Themen 9
A Probleme mit Vector Allgemeine Java-Themen 6
M Vergleich im geordeten Vector und Methodenaufruf Allgemeine Java-Themen 2
J Vector - Wert ersetzen Allgemeine Java-Themen 14
J Vector - Boolean Allgemeine Java-Themen 24
M Vector zu einem byte[] Allgemeine Java-Themen 5
J Vector<Shape> Speichern [gelöst] Allgemeine Java-Themen 11
Y Array mit ID in Vector Allgemeine Java-Themen 6
T Vector <-> double Allgemeine Java-Themen 4
T ArrayList bzw. Vector per set-Methode? Allgemeine Java-Themen 3
T ArrayList oder Vector als Parameter? Allgemeine Java-Themen 7
M Vector add() unchecked? Allgemeine Java-Themen 5
M Probleme und Zeitdruck: Kunden-DB (Vector) Allgemeine Java-Themen 13
T Vector Array Allgemeine Java-Themen 5
M Kunden-DB mit Vector Allgemeine Java-Themen 9
J Vector sortieren Allgemeine Java-Themen 3
M Vector - contain Allgemeine Java-Themen 13
C String und char[] / String[] und Vector Allgemeine Java-Themen 21
N Vector -> 2Diminsonaler Array Allgemeine Java-Themen 10
N Alledateien in einem Ordner in ein Vector speichern Allgemeine Java-Themen 19
K Object nach Vector konvertieren Allgemeine Java-Themen 3
Z ResultSet in Array oder Vector schreiben! Allgemeine Java-Themen 2
C vector von vector sortieren Allgemeine Java-Themen 4
D Vector in String Allgemeine Java-Themen 5
J Von Collection zu vector Allgemeine Java-Themen 5
D Vector in Datei schreiben Allgemeine Java-Themen 18
I Vector serialisieren: StackOverflow Allgemeine Java-Themen 13
H Vector in ein File-Array umwandeln Allgemeine Java-Themen 2
J User Klasse in den Vector, Object Klasse wieder raus... Allgemeine Java-Themen 4
K vector, synchronized und mehrere methoden Allgemeine Java-Themen 3
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
K Verbesserung der Laufzeit beim Sortieren von Einwohnern nach ihrem Geburtsjahr Allgemeine Java-Themen 0

Ähnliche Java Themen

Neue Themen


Oben