سؤال

هل يمكنني تبديل مفاتيح قيمتين من 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()));
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top