해시 맵을 사용하는 경우 반복 할 때 값과 키가 동일한 순서로 보장 되는가?

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

  •  02-07-2019
  •  | 
  •  

문제

값이나 키를 반복 할 때 상관 관계가 있습니까? 두 번째 키가 두 번째 값에 대한지도가 있습니까?

도움이 되었습니까?

해결책

아니요, 반드시 아닙니다. 이 목적을 위해 EntrySet (). iterator ()를 실제로 사용해야합니다. 이 반복자를 사용하면 모든 맵을 걸어 가게됩니다. 맵의 엔트리 객체는 각 키 및 관련 값에 액세스 할 수 있습니다.

다른 팁

@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 ()는 모두 EntrySet () 반복자로 위임되어 동일한 순서로 반환됩니다. 그러나 Alex가 말한 것처럼 EntrySet () 반복기를 직접 사용하는 것이 훨씬 낫습니다.

PMAC72에 동의합니다. 순서가없는 컬렉션에서 주문한 값이나 키를받을 것이라고 가정하지 마십시오. 그것이 때때로 작동한다면 그것은 단지 순수한 위험입니다. 주문을 보존하려면 LinkedHashmap 또는 Treemap 또는 Commons Collections OrderedMap을 사용하십시오.

이 질문은 처음에 나를 혼란스럽게했지만 @matt는 나를 위해 그것을 정리했습니다.

맵에 키 값 쌍이있는 세트를 반환하는 enty-set () 메소드를 사용하는 것을 고려하십시오.

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()) 

작동하면 자동으로 수행하는 데이터 구조를 사용하는 것이 더 좋습니다. 이제 "정상적으로"반복 할 수 있습니다.

Hashmap의 Keyset Method는 순서를 보장하지 않는 세트를 반환합니다.
Hashmap의 값 () 메소드는 컬렉션을 반환하여 순서를 보장하지 않습니다.

즉, 문제는 "그들이 상관 관계가있을 것"이므로 기술적으로 답은 아마도 대답이지만 의존하지는 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top