Am besten dafür geeignet ist ein TreeSet. zB:
@Override
public int compare(Object o1, Object o2) {
return o1.hashCode() - o2.hashCode();
}
(wieso subtrahiert man da die hashCodes? Oo)
Berechtigte Frage.
Die Implementierung ist so nicht ganz sicher: Der Vertrag von hashCode() sieht in keiner Weise vor, dass zurückgegebene Werte eine Ordnung haben müssen (siehe API).
Auch wenn man selbst Autor der verglichenen Klasse und des Comparator ist, und selbst weiß, dass hashCode() so implementiert ist, dass die ID geordnet ist, sollte man potentielle Leser nicht damit verwirren, das man so "um die Ecke" programmiert.
Funktioniert auch soweit, nur fallen mir jetzt doppelte Einträge weg - sprich, wenn zB schon nen Eintrag existiert der 2 ist, kommt kein 2. Eintrag rein, der auch 2 ist (c = 2)
Das liegt daran, wie sutupud sagt, dass du ein Set verwendest (gleiche Elemente kommen nur einmal vor), wo du eigentlich eine Liste haben möchtest.
Oki konnte das jetzt auch selber lösen:
if(o1.weight - o2.weight == 0)
return o1.weight;
Hast du so deine compareTo() implementiert? Solltest du aber nicht. Schau dir mal das Interface von Comparable an, der jenes von Comparator. Beide sagen, dass man bei Gleichheit der Objekte 0 zurückzugeben hat.
Was du machst, ist auf ein Set so lange einzudreschen, bis es sich wie eine Liste verhält. Mach es gleich richtig, und erspare dir zukünftige Fehler, indem du das Set in einer Liste ablegst, und die Liste dann mit einem Comparator über das Gewicht sortierst.