Vector sortieren nach Objekt-Info?

Status
Nicht offen für weitere Antworten.

soucy

Mitglied
Ich habe einen Vector mit Personen aus einer Datenbank. Da die ID als PrimaryKey nur 1 mal vorhanen sein darf, würde ich den Vector gerne danach sortieren.

Nun habe ich mir eine Funktion geschrieben.

Code:
	private Vector<Person> Sort(Vector<Person> vec)
	{
		int i,j;
		Person tmp = new Person();
		Person p1 = new Person();
		Person p2 = new Person();
		for(i=0;i<vec.capacity()-1;i++)
		{
			for(j=0;j<vec.capacity()-i-1;j++)
			{
				p1 = vec.get(0);
				p2 = vec.get(2);
				if(Integer.valueOf(p1.getID()).intValue() >= Integer.valueOf(p1.getID()).intValue())
				{
					tmp = p1;
					p1 = p2;
					p2 = tmp;
					vec.remove(0);
					vec.add(0, p1);
					vec.remove(2);
					vec.add(2, p2);
				}
			}
		}
		return vec;
	}

Der Code hier funktioniert und tauscht mir das 1. (Pos. 0) mit dem 3. (Pos. 2) Element in der Liste.

Wenn ich jedoch anstatt der 0 j und anstatt der 2 ein j+1 einsetze, dann schmiert das Programm immer ab.

Kann mir jemand sagen wieso ich die Laufvariablen des BubbleSort hier nicht einsetzen kann? Das sind doch auch nichts anderes als Integer Werte :(
 

André Uhres

Top Contributor
Ausser dem Bubblesort gibt's auch noch Collections.sort (mit Mergesort Algorithmus) und TreeSet.
Letzterer ist immer sortiert und eliminiert Doppelte automatisch.
Für die Alternativen muss Person einfach nur das Interface Comparable implementieren.
Btw: Bubblesort Beispiele findest du mit wenig Suche Haufenweise.
 
S

SlaterB

Gast
zur ursprünglichen Fehlersuche:

Tipp: wenn man sich mit dem Sortieralgorithmus noch nicht so sicher ist, dann testet man ihn idealerweise mit Strings und nicht komplizierten Person-Objekten,

dazu macht man sich einen Testvektor mit drei Elementen und noch die ein oder andere Zwischenausgabe,
man schaut sich Schritt für Schritt an, was eigentlich passiert

dann sag selbst: wie kann man nach diesen simplen Tricks den Fehler nicht selber finden? ;) :

Code:
import java.util.Vector;

public class Test {

	public static void main(String[] args) throws Exception {
		Vector vec = new Vector();
		vec.add("h");
		vec.add("c");
		vec.add("e");
		p("vec: " + vec);
		new Test().sort(vec);
		p("vec: " + vec);
	}

	public Vector sort(Vector vec) {
		int i, j;
		String s1 = null; // besser mit null initialisieren 
		String s2 = null;

		for (i = 0; i < vec.capacity() - 1; i++) {
			for (j = 0; j < vec.capacity() - i - 1; j++) {
				int a = j;
				int b = j + 1;
				p("a: "+a+" - b: "+b+" j: "+j+" Maximum für j: "+(vec.capacity() - i - 1));
				s1 = (String) vec.get(a);
				s2 = (String) vec.get(b);
				if (s1.compareTo(s2) > 0) {
					p("tausche s1: "+s1+" ("+a+") mit "+s2+" ("+b+")");
					vec.remove(a);
					vec.add(a, s2); 
					vec.remove(b);
					vec.add(b, s1);
					p("vec: "+vec);
				}
			}
		}
		return vec;
	}

	public static void p(String st) {
		System.out.println(st);
	}
}
 
B

Beni

Gast
Und wenn man einen etwas schnelleren Algorithmus haben will, verwendet man einfach "Collections.sort" :wink:
 

soucy

Mitglied
Ich glaube ich sollte nach einer gewissen Zeit eine Programmierpause einlegen. Denn sonst wird man leicht Fehlerblind.

Heute morgen an den Code gesetzt und in 2 Min warn die Fehler korrigiert.

Zum einen muss ich .size() und nicht .capacity() benutzen und zum anderen habe ich bei der IF Abfrage auf beiden Seiten den String von P1 geholt :)

Trotzdem danke für eure Tipps.
 

thE_29

Top Contributor
@Beni: weißt du eigentlich welcher Sort das ist?

Habe mir den QuickSort nachgeschrieben und sortiere dann immer übers compareable Interface!

Geht auch ruckzuck im Vergleich zum BubbleSort!
 
B

Beni

Gast
Klar weiss ich das the_29 - es steht ja in der API :bae:

Es ist ein leicht erweiterter Mergesort, also mit schlechtester Laufzeit O( n log n ) wenn ich mich nicht irre.
 

Leroy42

Top Contributor
thE_29 hat gesagt.:
@Beni: weißt du eigentlich welcher Sort das ist?
Ein verfeinerter Merge-Sort!.

Ich hab' mal versucht ihn im Eclipse-Debugger zu analysieren :autsch:

==> Ich begnüge mich lieber damit die reinen Versionen der bekannten
Sortieralgorithmen zu verstehen.

thE_29 hat gesagt.:
Geht auch ruckzuck im Vergleich zum BubbleSort!

Bei den heutigen Rechnerleistungen gehen alle O(n*log n) Sortieralgorithmen ruckzuck.

Um überhaupt Unterschiede feststellen zu können, mußt du schon ein paar Millionen Werte
ein paar tausend mal sortieren um die Auflösung von System.currentTimeMillis zu umgehen.

Aber vorsicht: Die Zeiten für die Neuerzeugungen des unsortierten Arrays müssen
natürlich rausgerechnet werden. :meld:
 

thE_29

Top Contributor
Mist, der Mergesort ist meinem Quicksort überlegen! ( worst cat O(n²))

Mhm.. Könnte ich ja den Mergesort einbauen wenns mir mal fad ist :bae:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Spot84 Vector nach Ressourcetyp sortieren Allgemeine Java-Themen 4
Z Elemente in Vector nach Häufigkeit sortieren. Allgemeine Java-Themen 13
I Vector mit Objekten sortieren,Videos mit JMF wiedergeben Allgemeine Java-Themen 6
W [solved] Vector sortieren (Collection / Comparable?) Allgemeine Java-Themen 7
J Vector sortieren Allgemeine Java-Themen 3
C vector von vector sortieren Allgemeine Java-Themen 4
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
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
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
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
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
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
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
Willi.We Array sortieren Allgemeine Java-Themen 5
L ArrayList sortieren Allgemeine Java-Themen 2
Monokuma String List nach Zahlen und Worten sortieren Allgemeine Java-Themen 9
MiMa ArrayList sortieren?? Allgemeine Java-Themen 5
C MySQL Tabellen sortieren. Allgemeine Java-Themen 33
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
B Java Mail: Emails sortieren? Allgemeine Java-Themen 5
G Liste (UsageStats) sortieren (Android) Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben