عند استخدام HashMap، هل يتم ضمان أن تكون القيم والمفاتيح بنفس الترتيب عند التكرار؟

StackOverflow https://stackoverflow.com/questions/128008

  •  02-07-2019
  •  | 
  •  

سؤال

عندما أكرر القيم أو المفاتيح، هل سيتم ربطها؟هل سيتم تعيين المفتاح الثاني إلى القيمة الثانية؟

هل كانت مفيدة؟

المحلول

لا، ليس بالضرورة.يجب عليك حقًا استخدام inputSet().iterator() لهذا الغرض.باستخدام هذا المكرّر، ستتنقل عبر جميع كائنات Map.Entry الموجودة في الخريطة ويمكنك الوصول إلى كل مفتاح والقيمة المرتبطة به.

نصائح أخرى

لاستخدام مجموعة الإدخال التي ذكرهاCuchullain:

Map<String, String> map = new HashMap<String, String>();

// populate hashmap

for (Map.Entry<String, String> entry : map.entrySet()) {
  String key = entry.getKey();
  String value = entry.getValue();
  // your code here
}

تريد استخدام هذا، LinkedHashMap, ، لترتيب التكرار المتوقع

public class Test {
 public static void main(String[] args) {
  HashMap <String,String> hashmap = new HashMap<String,String>();
  hashmap.put("one", "1");
  hashmap.put("two", "2");
  hashmap.put("three", "3");
  hashmap.put("four", "4");
  hashmap.put("five", "5");
  hashmap.put("six", "6");

  Iterator <String> keyIterator   = hashmap.keySet().iterator();
  Iterator <String> valueIterator = hashmap.values().iterator();

  while(keyIterator.hasNext()) {
   System.out.println("key: "+keyIterator.next());
  }

  while(valueIterator.hasNext()) {
   System.out.println("value: "+valueIterator.next());
  }
 }
}

key: two
key: five
key: one
key: three
key: four
key: six
value: 2
value: 5
value: 1
value: 3
value: 4
value: 6

يتم تفويض كل من القيمتين () وkeySet () إلى مكرر الإدخال () بحيث يتم إرجاعهما بنفس الترتيب.ولكن كما يقول Alex، فمن الأفضل استخدام مكرر الإدخال ()entrySet مباشرة.

وأنا أتفق مع pmac72.لا تفترض أنك ستحصل على قيم أو مفاتيح مرتبة من مجموعة غير مرتبة.إذا كان يعمل من وقت لآخر فهو مجرد خطر خالص.إذا كنت تريد الحفاظ على الطلب، فاستخدم LinkedHashMap أو TreeMap أو مجموعات المشاعات OrderedMap.

لقد حيرني السؤال في البداية لكن @Matt أوضحه لي.

فكر في استخدام طريقة الإدخال ()entrySet التي تُرجع مجموعة تحتوي على أزواج القيمة الرئيسية على الخريطة.

Map<Integer, Integer> a = new HashMap<Integer, Integer>(2);
a.put(1, 2);
a.put(2, 3);
for (Map.Entry<Integer, Integer> entry : a.entrySet()) {
    System.out.println(entry.getKey() + " => " + entry.getValue());
}

هذه المخرجات:

1 => 2
2 => 3
3 => 3

أنا ثاني @basszero.بينما

for (Map.Entry<Integer, Integer> entry : a.entrySet()) 

سوف ينجح الأمر، أجد أن استخدام بنية البيانات التي تقوم بذلك تلقائيًا هو الأفضل.الآن، يمكنك فقط التكرار "بشكل طبيعي"

تقوم طريقة keySet الخاصة بـ HashMap بإرجاع مجموعة، والتي لا تضمن الترتيب.
تُرجع طريقة value() الخاصة بـ HashMap مجموعة، والتي لا تضمن الترتيب.

ومع ذلك، كان السؤال "هل سيرتبطان" لذا من الناحية الفنية ربما تكون الإجابة، لكن لا تعتمد عليها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top