Java HashMap: Swap zwei Werte?
Frage
Kann ich die Schlüssel von zwei Werten einer HashMap tauschen, oder muss ich etwas Gescheites tun?
Etwas, das wie folgt aussehen würde:
Map.Entry<Integer, String> prev = null;
for (Map.Entry<Integer, String> entry: collection.entrySet()) {
if (prev != null) {
if (entry.isBefore(prev)) {
entry.swapWith(prev)
}
}
prev = entry;
}
Lösung
Nun, wenn Sie nur nach einer Karte sind, wo die Schlüssel bestellt werden, verwenden Sie ein SortedMap
statt.
SortedMap<Integer, String> map = new TreeMap<Integer, String>();
Sie können auf der natürlichen Ordnung des Schlüssels verlassen (wie in seiner Comparable
Schnittstelle) oder Sie können, indem ein Comparator
individuelle Bestellung machen.
Alternativ können Sie setValue()
auf der Entry
nennen.
Map.Entry<Integer, String> prev = null;
for (Map.Entry<Integer, String> entry: collection.entrySet()) {
if (prev != null) {
if (entry.isBefore(prev)) {
String current = entry.getValue();
entry.setValue(prev.getValue();
prev.setValue(current);
}
}
prev = entry;
}
Persönlich würde ich nur mit einem SortedMap
gehen.
Andere Tipps
Es gibt nichts Vergleichbares, dass in dem Map
oder Entry
Schnittstellen, aber es ist ziemlich einfach zu implementieren:
Map.Entry<Integer, String> prev = null;
for (Map.Entry<Integer, String> entry: collection.entrySet()) {
if (prev != null) {
if (entry.isBefore(prev)) {
swapValues(e, prev);
}
}
prev = entry;
}
private static <V> void swapValues(Map.Entry<?, V> first, Map.Entry<?, V> second)
{
first.setValue(second.setValue(first.getValue()));
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow