Collection Sort

Status
Nicht offen für weitere Antworten.
S

SideWinder

Gast
Hi.
ich hab folgendes Problem:
Ich soll eine ArrayList<Point> sortieren, mit einem Divide & Conquer verfahren. Ergo dacht ich mir, nimmste Mergesort, da meines Wissens nach das Collectionsortverfahren, das man ja importieren kann, Mergesort ist.

Nun Meine Frage, ich will dass die Objekte entsprechend ihren X Koordinaten Sortiert werden, wie mache ich das?

Danke vielmals!!!!
 
G

Guest

Gast
huh?

Ich hab doch folgendes, gell? :


Code:
Collections.sort(names);

und importiere dafuer:


Code:
import java.util.Collections;


Wo kommt denn da noch ein KComparator rein?
(ich hab das hier gefunden:
http://www.kiesler.at/article38.html?&MMN_position=55:42:54)

Kannst du mir ein kurzes Beispiel geben, bitte?

dangee
 

tfa

Top Contributor
Du könntest dich mit kwonilchang zusammentun. Der hat das gleiche Problem (will allerdings Quicksort einsetzen).
 

tincup

Bekanntes Mitglied
Worum es geht ist, dass du nur dann sortieren kannst, wenn du auch eine Ordnung auf deinen zu sortierenden Objekten definierst. Also musst du dem Sortierer beibringen, dass PunktA < PunktB genau dann wenn gilt PunktA.X < PunktB.X (genauer <= aber egal für hier).

Das machst du, in dem du entweder "Comparable" in deiner Point-Klasse implementierst (falls du auf den Code zugreifen kannst) oder eben einen Comparator erstellst. Beides würde zu einer Funktion führen, die du so implementieren musst, dass entweder -1, 0 oder 1 zurückgegeben wird. Je nachdem welcher der beiden Punkte (nach deiner Ordnungsdefinition) kleiner oder größer oder gleich dem anderen ist.

HTH
 

kwonilchang

Aktives Mitglied
Wie tfa schon geschrieben hat, habe ich das gleiche Problem, die ArrayList zu sortieren.

Habe in meine Point-Klasse jetzt mal Comparable implementiert:

Code:
class Point implements Comparable <Point>{
	int x;
	int y;
	
	Point (int x, int y){
		this.x = x;
		this.y = y;
	}
	
	public String toString (){
		String s = "";
		
		s = "" + "(" + x + ", " + y + ")";
		
		return s;
	}
	
	public int compareTo (Point p){
		if( this.x < p.x ) 
            return -1; 
        if( this.x > p.x ) 
            return 1; 
            
        return 0; 
	}
}

Weiß jetzt aber nicht, wie die Sortierung weiter geht. Muss man eine Sortiermethode schreiben oder gibt es da nicht eine vordefinierte Methode .sort()?
 
M

maki

Gast
Collections.sort(..)

Abgesehen davon, könnte man die compare Methoide auch verkürzen, anstatt:
Code:
   public int compareTo (Point p){
      if( this.x < p.x )
            return -1;
        if( this.x > p.x )
            return 1;
           
        return 0;
   }
wäre auch das hier möglich:
Code:
   public int compareTo (Point p){
      return this.x - p.x;
   }
 

kwonilchang

Aktives Mitglied
Danke, jetzt funktioniert die Sortierung schonmal halbwegs.

Habe aber jetzt folgendes Problem:

Die Punkte sollen zuerst nach der x-Koordinate sortiert werden. Dies geht ja nun schon. Sollten jedoch Punkte mit der gleichen x-Koordinate eingegeben werden, so sollen diese Punkte nach der y-Koordinate in die Liste einsortiert werden.

Wenn ich nun einen dritten if-Fall verwende (this.x = p.x) erhalte ich eine Fehlermeldung "Can't match boolean to int". Steh anscheinend grad auf dem Schlauch... Eine zweite compareTo-Methode kann ich ja nicht einfach erstellen, da weiß das Programm ja nicht mehr, auf welche es zugreifen soll.
 

kwonilchang

Aktives Mitglied
Danke!

So funktioniert die Sortierung aber leider nicht:

Code:
public int compareTo (Point p){
		int ergebnis = 0;
		
		if (this.x < p.x)
			ergebnis = -1;
		
		if (this.x > p.x)
			ergebnis = 1;
		
		if (this.x == p.x)
			if (this.y < p.y)
				ergebnis = -1;
			if (this.y > p.y)
				ergebnis = 1;
			
			ergebnis = 0;
		
		
		return ergebnis;
	}

Liegt das an der Schachtelung?
 

kwonilchang

Aktives Mitglied
@ tfa: Danke für den Hinweis. Hatte diese Schreibweise schon ein paar Mal gesehen. Führt aber offensichtlich zu Fehlern.

Code:
public int compareTo (Point p){
		int ergebnis = 0;
		
		if (this.x < p.x){
			ergebnis = -1;
		}
		if (this.x > p.x){
			ergebnis = 1;
		}
		if (this.x == p.x){
			if (this.y < p.y){
				ergebnis = -1;
			}
			if (this.y > p.y){
				ergebnis = 1;
			}
			ergebnis = 0;
		}
		
		return ergebnis;
	}

Gebe ich jetzt Punkte ein, so wird mir die Liste so sortiert:

[(1, 5), (1, 2), (2, 3), (3, 4)]

Gleiche x-Koordinaten werden zwar erkannt, aber die y-Koordinaten nicht aufsteigend sortiert. Woran liegt das denn :bahnhof: ?
 
M

maki

Gast
Manchmal ist es ganz gut, Code zu vereinfachen.

if (this.x == p.x) {
return this.y - p.y;
} else {
return this.x - p.x;
}
 

tfa

Top Contributor
Wenn die x-Koordinaten gleich sind, wird "ergebnis" immer auf 0 gesetzt. Das willst du bestimmt nicht.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Collection.sort sortiert nicht Java Basics - Anfänger-Themen 7
S Collection<Typ> sort Java Basics - Anfänger-Themen 4
D Frage zu Collection.sort bzw. Comparator u. Comparable Java Basics - Anfänger-Themen 2
Encera Garbage Collection Java Basics - Anfänger-Themen 9
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
D public ArrayList(Collection<? extends E> c); Java Basics - Anfänger-Themen 2
O Verwirrt beim Java Collection Framework aufruf! Java Basics - Anfänger-Themen 9
T Collections Geeignete Collection/Liste/Datenbank Java Basics - Anfänger-Themen 17
E Interface List nicht als Collection an erkannt. Java Basics - Anfänger-Themen 14
F Collection Aufgabe mit LinkedList Java Basics - Anfänger-Themen 3
N Collections Werte aus .txt in einer Collection speichern Java Basics - Anfänger-Themen 11
M Collection Aufgabe Java Basics - Anfänger-Themen 22
Arif Collections Unkonstruiertes Objekt einer Collection hinzufügen Java Basics - Anfänger-Themen 2
W Collection-Problem Java Basics - Anfänger-Themen 35
P Klassen In einer Autoklasse das Objekt Auto mittels Collection Speichern Java Basics - Anfänger-Themen 4
N Collection sortieren/ filtern Java Basics - Anfänger-Themen 7
K Collections Zugriff auf ein bestimmtes Element in der Collection Java Basics - Anfänger-Themen 1
J Objekt in Collection speichern Java Basics - Anfänger-Themen 4
A Interface in Collection (Liste) angeben Java Basics - Anfänger-Themen 2
J Collection Objekt Java Basics - Anfänger-Themen 3
T Collections Zusammengehörende Strings in einer Collection Java Basics - Anfänger-Themen 2
S Frage zu Collection-Generics in Subklassen Java Basics - Anfänger-Themen 6
B Collections Collection soll nur einen bestimmten Datentyp aufnehmen Java Basics - Anfänger-Themen 12
B addAll(Collection<? extends E> c) Java Basics - Anfänger-Themen 9
K Collections Collection für 12 mio Strings Java Basics - Anfänger-Themen 7
Y Collection der eigenen Klasse Java Basics - Anfänger-Themen 10
S Collections Welche Collection ist am geeignetsten? Java Basics - Anfänger-Themen 3
R Passende Collection gesucht Java Basics - Anfänger-Themen 11
G Collections Wahl der richtigen Collection Java Basics - Anfänger-Themen 11
O Frage zu Verständnis von Collection Java Basics - Anfänger-Themen 4
D Scala Iterable zu Java Collection konvertieren Java Basics - Anfänger-Themen 3
D Frage zu Collection und deren Anwendung Java Basics - Anfänger-Themen 2
S Welche Collection kann sich selber sortieren? Java Basics - Anfänger-Themen 8
J Collection soll übergeben werden... Java Basics - Anfänger-Themen 7
C Vector - obsolete collection Java Basics - Anfänger-Themen 1
B Iterator und Collection Java Basics - Anfänger-Themen 11
G Java Collection Frameworks Java Basics - Anfänger-Themen 5
D Collection Konvertieren Java Basics - Anfänger-Themen 7
K Datentypen Über Collection iterieren bringt fehler Java Basics - Anfänger-Themen 8
K OOP Aus Collection Objekte bestimmter Subklassen entfernen Java Basics - Anfänger-Themen 7
S Welche Collection? Java Basics - Anfänger-Themen 5
S Collection rückwärts durchsuchen Java Basics - Anfänger-Themen 4
W Wie kann ich auf Object meiner Collection zugreifen Java Basics - Anfänger-Themen 7
J Collection Vector Java Basics - Anfänger-Themen 8
B Collection während Iteration verändern Java Basics - Anfänger-Themen 7
T Collection in collection Java Basics - Anfänger-Themen 6
T Collection von Objekten verschiedener Klassen Java Basics - Anfänger-Themen 4
J Collection ArrayList und mit erweitertem for iterieren Java Basics - Anfänger-Themen 7
J Probleme mit Collection ArrayList Java Basics - Anfänger-Themen 2
C Collection vs. LinkedList, Abstrakt vs. Konkret Java Basics - Anfänger-Themen 9
G Collection<BufImg> in Datei speichern Java Basics - Anfänger-Themen 8
A Collection auslesen ohne Objekttyp zu kennen? Java Basics - Anfänger-Themen 11
G Collection<Strings> - Liste von Strings verwalten Java Basics - Anfänger-Themen 9
A Struts: Über Collection iterieren mir Taglibs? Java Basics - Anfänger-Themen 13
0x7F800000 elemente aus einer Collection korrekt löschen Java Basics - Anfänger-Themen 8
T Frage zu Vererbung beim Collection-Framework Java Basics - Anfänger-Themen 4
I Frage zu Collection und List Interfaces Java Basics - Anfänger-Themen 2
M Object [][] ist nicht vom Typ Collection? Java Basics - Anfänger-Themen 3
S Collection wie LinkedHashMap Java Basics - Anfänger-Themen 7
J LinkedList, Collection, ArrayList, List. was denn bitte? Java Basics - Anfänger-Themen 6
A Welche Collection? Java Basics - Anfänger-Themen 13
C Collection in Verbindung mit String.split speicherlastig Java Basics - Anfänger-Themen 20
S Collection in einer Collection Java Basics - Anfänger-Themen 5
A Welche Collection soll ich nehmen? Java Basics - Anfänger-Themen 4
E welche Datenstruktur (Collection) Java Basics - Anfänger-Themen 4
K Collection und Iterator Java Basics - Anfänger-Themen 7
I Bestimmte Variablen in Collection Classes Java Basics - Anfänger-Themen 2
M Source Code von Collection Framework, etc. Java Basics - Anfänger-Themen 3
vogella Cast from Collection.toArray to String[] Java Basics - Anfänger-Themen 2
K Verständnisfrage Collection, ArrayList und Referenzen Java Basics - Anfänger-Themen 4
S Mit Collection<int[]> umgehen Java Basics - Anfänger-Themen 2
S welche collection ? String und object Java Basics - Anfänger-Themen 5
M gibt es eine collection mit definierter maximaler größe Java Basics - Anfänger-Themen 4
G Collection Framework Java Basics - Anfänger-Themen 8
V Mehrdimensionale Collection? Java Basics - Anfänger-Themen 4
U JSTL: Collection auslesen mit forEach Java Basics - Anfänger-Themen 1
A Interface Collection implementieren? Java Basics - Anfänger-Themen 4
I Collection sortieren, ":" höchste "Priorität& Java Basics - Anfänger-Themen 4
P Äquivalent zu Visual Basic Collection Java Basics - Anfänger-Themen 6
G Collection, aber welche? Java Basics - Anfänger-Themen 6
A Collection<String> Java Basics - Anfänger-Themen 4
E Strings in Collection Java Basics - Anfänger-Themen 6
R welche Collection nehmen? Java Basics - Anfänger-Themen 4
P Collection Vector speichern mittels Serialisierung? Java Basics - Anfänger-Themen 2
megachucky Collection Vector: ausgabe klappt nicht richtig Java Basics - Anfänger-Themen 9
T Welche Collection nehmen? HashMap? Java Basics - Anfänger-Themen 4
L-ectron-X Speicher freigeben - Garbage Collection Java Basics - Anfänger-Themen 6
emreiu Formatiertes Output bei Insertion Sort Java Basics - Anfänger-Themen 6
O Sortieren mit Insertion Sort Java Basics - Anfänger-Themen 3
Tw1Z Erste Schritte Sort in java Java Basics - Anfänger-Themen 2
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
X Collections.sort als Lambda Java Basics - Anfänger-Themen 14
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
L Insertion Sort bei zweidimensionalem Array Java Basics - Anfänger-Themen 7
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
Marc111111111 Selection Sort in Java?? Java Basics - Anfänger-Themen 6
G Insertion Sort mit Aray Java Basics - Anfänger-Themen 5
O Collections.sort und List.sort mit Lambda Verwirrung Java Basics - Anfänger-Themen 5
B Collections.sort mit zwei Bedingungen? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben