質問
ハッシュマップの2つの値のキーを交換することはできますか?
次のように見えるもの:
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;
}
解決
まあ、キーが並べられているマップの直後にいる場合は、 SortedMap
代わりに。
SortedMap<Integer, String> map = new TreeMap<Integer, String>();
キーの自然な順序( Comparable
インターフェイスなど)に依存するか、 Comparator
を渡すことでカスタムの順序を指定できます。
別の方法として、 Entry
で setValue()
を呼び出すこともできます。
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;
}
個人的には SortedMap
を使用します。
他のヒント
Map
または Entry
インターフェースにはそのようなものはありませんが、実装は非常に簡単です:
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()));
}
所属していません StackOverflow