2012-04-06 7 views
1

Ich suchte im Internet (und Stackoverflow) viel, konnte aber nicht genau das finden, was ich suchte. Konnte das Konzept auch nicht wirklich verstehen.Eine TreeMap in Java verwenden

Als Java-Zuweisung habe ich eine treeMap, die einige Werte speichert.

Natürlich speichert es sie aufsteigend durch seine String-Werte. Aber ich möchte, dass es seine Werte aufsteigend nach seinen Double-Werten speichert. Wie kann ich dies durch einen Komparator erreichen? Details würden sehr geschätzt werden.

Auch wieder in dieser Zuordnung habe ich eine andere, separate treeMap, die verschiedene Werte speichert. Wieder wie folgt erklärt:

Es ist in Ordnung für es seine Werte aufsteigend nach String zu speichern. Ich verwende es so, um seine Werte auszudrucken, aber ich muss auch seine Werte in aufsteigender Reihenfolge, sortiert nach Double, drucken. Wie kann ich eine treeMap neu sortieren? Auch hier würden Details sehr geschätzt.

+0

keine eingebaute Karte Implementierungen gibt, die Sie sortieren nach lassen Werte. Keiner. –

Antwort

2

Sie können TreeMap nicht umsortieren. Es hat eine feste Iterationsreihenfolge, bestimmt unter TreeMap Konstrukt-Zeit. Wenn Sie eine andere Sortierreihenfolge wünschen, verwenden Sie eine andere Datenstruktur.

Ich verwende es so, um seine Werte auszudrucken, aber ich muss auch seine Werte in aufsteigender Reihenfolge, sortiert nach Double, drucken.

Sorgen Sie sich also nicht um das Sortieren der TreeMap. Erstellen Sie eine List<Double> der Werte in der Karte, und sortieren Sie diese.

List<Double> values = new ArrayList<Double>(customers.values()); 
Collections.sort(values); 
System.out.println(values); 
+0

Eine elegante Lösung, aber ich muss eine TreeMap verwenden. Danke trotzdem. : D –

+0

Ich habe nicht gesagt, dass Sie eine 'TreeMap' nicht verwenden können. Sie können die sortierten Werte nur drucken, ohne zusätzliche Arbeit zu leisten. –

1

Machen Sie eine weitere Karte:

Map<Double, String> values = new TreeMap<Double, String>(); 

und immer auf beiden Karten hinzufügen (zum Beispiel über eine Hilfsmethode). Sofern keine Speicherbeschränkungen bestehen, erhalten Sie Ihre customers Karten sortiert nach Kunden und values sortiert nach was auch immer der Double Wert darstellt.

Wenn Sie doppelte Werte haben, können Sie eine Liste (oder einen Satz, abhängig von den Anforderungen) machen können von Kunden statt:

Map<Double, List<String>> values = new TreeMap<Double, List<String>>(); 
+0

@ MдΓΓБДLL Ich weiß es nicht - deshalb habe ich gesagt "Wenn du kannst". Set hilft - das sind doppelte Werte von (Double) value, (String) Kunden müssen eindeutig sein, da die erste Karte sonst nutzlos wäre (d. H. Einige Kunden würden überschrieben). –

+0

Ich habe meinen Kommentar gelöscht, weil ich festgestellt habe, dass Sie die Karte > als Umkehrung der Kundenkarte des OPs verwenden. Es tut uns leid! –

+0

@ MдΓΓБДLL Keine Sorgen :) –