Когда использование HashMap является значениями, и ключи гарантировали, что были в том же порядке при итерации?

9
задан Allain Lalonde 24 September 2008 в 15:53
поделиться

9 ответов

Нет, не обязательно. Необходимо действительно использовать entrySet () .iterator () с этой целью. С этим итератором Вы будете идти через всю Карту. Объекты записи в Карте и могут получить доступ к каждому значению ключа и присваиваемому значению.

14
ответ дан 4 December 2019 в 06:42
поделиться

для использования entrySet, который упомянул @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
}
8
ответ дан 4 December 2019 в 06:42
поделиться

Оба значения () и набор ключей () делегируют к entrySet () итератор, таким образом, они будут возвращены в том же порядке. Но как Alex говорит, что намного лучше использовать entrySet () итератор непосредственно.

2
ответ дан 4 December 2019 в 06:42
поделиться

Я соглашаюсь с pmac72. Не предполагайте, что Вы получите заказанные значения или ключи от незаказанного набора. Если это работает время ко времени, это - просто чистая опасность. Если Вы хотите, чтобы порядок был сохранен, используйте LinkedHashMap или TreeMap или наборы свободного городского населения OrderedMap.

1
ответ дан 4 December 2019 в 06:42
поделиться

Вы хотите использовать это, LinkedHashMap, для предикабельного итеративного порядка

7
ответ дан 4 December 2019 в 06:42
поделиться

Вопрос смутил меня сначала, но @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
0
ответ дан 4 December 2019 в 06:42
поделиться

Я второй @basszero. В то время как

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

будет работать, я нахожу использование структуры данных, которая делает это автоматически более хорошо. Теперь, можно просто выполнять итерации "обычно"

0
ответ дан 4 December 2019 в 06:42
поделиться

Метод набора ключей HashMap возвращает Набор, который не гарантирует порядка.
Значения HashMap () метод возвращает Набор, который не гарантирует порядка.

Тем не менее вопрос был, "они собирающийся коррелировать" так технически, ответ, возможно, но не полагайтесь на него.

0
ответ дан 4 December 2019 в 06:42
поделиться
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
3
ответ дан 4 December 2019 в 06:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: