جافا Hashmap: مبادلة قيمتين؟
سؤال
هل يمكنني تبديل مفاتيح قيمتين من Hashmap، أو هل أنا بحاجة إلى القيام بشيء ذكي؟
وشيء من شأنها أن ننظر بشيء من هذا القبيل:
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;
}
المحلول
حسنا، إذا كنت للتو بعد خريطة حيث يتم ترتيب المفاتيح، استخدم <لأ href = "http://www.j2ee.me/javase/6/docs/api/java/util/SortedMap. أتش تي أم أل "يختلط =" نوفولو noreferrer "> SortedMap
بدلا من ذلك.
SortedMap<Integer, String> map = new TreeMap<Integer, String>();
ويمكنك الاعتماد على ترتيب الطبيعي للمفتاح (كما هو الحال في واجهة Comparable
به) أو يمكنك القيام به ترتيب مخصص عن طريق تمرير Comparator
.
وبدلا من ذلك يمكنك الاتصال setValue()
على Entry
.
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