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;
    }
War es hilfreich?

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
scroll top