Wenn Sie eine sortierte Liste wünschen, können Sie zum Beispiel eine Liste nehmen und Collections.sort() nach jedem Einfügen manuell aufrufen.
Oder Sie wickeln z.B. eine ArrayList ein, um die Sortieraufrufe für Sie zu übernehmen:
class SortedArrayList extends ArrayList<String> {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public void add(int index, String element) {
super.add(index, element);
Collections.sort(this);
}
@Override
public boolean add(String element) {
boolean returnValue = super.add(element);
Collections.sort(this);
return returnValue;
}
@Override
public boolean addAll(Collection<? extends String> c) {
boolean returnValue = super.addAll(c);
Collections.sort(this);
return returnValue;
}
@Override
public boolean addAll(int index, Collection<? extends String> c) {
boolean returnValue = super.addAll(index, c);
Collections.sort(this);
return returnValue;
}
@Override
public String set(int index, String element) {
String returnValue = super.set(index, element);
Collections.sort(this);
return returnValue;
}
}
Ich hoffe, ich habe alle Funktionen, die eine Sortierung erfordern können. (Entfernen ist nicht notwendig, um zu überschreiben)
6 Stimmen
Verwenden Sie einen Comparator, der nicht 0 zurückgibt.
1 Stimmen
@Peter Lawrey Anders als bei Objekten, die in gewisser Weise identisch sind.
0 Stimmen
@Tom Hawtin, einverstanden, Sie könnten 0 zurückgeben, wenn die Objekte
==
vergleichen Sie sonst dieSystem.identityHashCode()
oder geben Sie einfach eine beliebige1
für Objekte, die denselben Inhalt haben, aber nicht dasselbe Objekt sind.0 Stimmen
@Petery Lawrey
System.identityHashCode
ist nicht eindeutig. Man bräuchte also immer noch einen Tie-Breaker (vielleicht mitWeakReference
s).