Ich habe eine Sammlung von großen Anzahl der Objekte, die durch Name/Wert-Paare definiert sind. Ich brauche schnellen Zugriff auf alle ihre Werte und in der Lage, sie alphabetisch sortiert nach Namen zurückgeben. Zuerst dachte ich, ich könnte eine HashMap verwenden, um schnell darauf zugreifen zu können. Aber es gab mir keine Bestellung. Ich habe mich entschieden, zu LinkedHashSet zu wechseln. Das Problem damit ist, dass ich einfügen kann neue Objekte an den richtigen Stellen der Liste, aber LinkedHashSet erlaubt das nicht. Ich muss auch auf Objekte sowohl über ihren Index als auch über ihren Namen zugreifen können.
Wir danken für jede Idee.Wie behalte ich ein Hashset alphabetisch sortiert?
Antwort
können Sie TreeMap
Ein Rot-Schwarz-Baum basiert NavigableMap Implementierung verwenden. Die Map wird nach der natürlichen Reihenfolge ihrer Schlüssel sortiert, oder nach einem Komparator, der bei der Erstellung der Map zur Verfügung gestellt wird, abhängig davon, welcher Konstruktor verwendet wird.
Ich würde ein TreeSet verwenden, das ein SortedSet ist. Sie müssen Ihre benutzerdefinierte Klasse basierend auf dem Namen als Vergleichbar definieren, und Ihre Sammlung wird immer sortiert.
Hinweis: Sortierte Sammlungen haben eine Zugriffszeit von O (log N).
Haben Sie sich TreeMap angesehen? Es basiert auf Rot-Schwarz-Bäumen, die helfen, die Bestellung aufrecht zu erhalten, aber dennoch einen schnellen Zugriff ermöglichen.
Warum nicht versuchen TreeSet. Erlaubt Ihre Liste keine Duplikate? Wenn ja, dann sollte das Set in Ordnung sein. Wie Sie Strings hinzufügen und diese implementiert den Satz Komparator wird automatisch für Sie
sortiert werden, wenn Sie hatten
Set<String> s = new TreeSet<String>();
s.add("B");
s.add("C");
s.add("A");
dann wäre der Inhalt des Satzes A, B, C
A TreeMap
sollte Ihren Anforderungen entsprechen. Wenn Ihre Schlüssel keine Literale sind, verwenden Sie den entsprechenden Comparator
im TreeMap-Konstruktor.
Sie können Comparator verwenden ..
Collections.sort(yourCollection, new Comparator() {
public int compare(YourObject o1, YourObject o2) {
// put Comparesion according to your requirement
return AnyObject;
}
});
Haben Sie versucht, 'TreeMap'? – Santosh