2010-08-13 3 views
33

LinkedHashMap.keySet()이 불려 갔을 때, 반환되는 Set의 순서는 키가 추가 된 순서와 같게 될까?Java의 LinkedHashMap은 키 순서를 유지합니까?

+0

PHP에서 오는 사람들은 LinkedHashMap이 PHP 배열과 매우 흡사하다는 것을 지적하여 도움을 받겠습니다. –

답변

44

예.

참조 : LinkedHashMap는 :

이 연결리스트는 일반적으로 키가 지도 (삽입 순서)에 삽입 된 순서 인 반복 순서를 정의합니다.

HashMap#keySet 문서에서

:

설정된 때문에지도에 변경 에 세트를 반영,지도에 의해 뒷받침된다 반환, 그 반대의 경우도 마찬가지입니다.

+2

@Tom 고마워, 나는 아직도 이것이 명백하다는 것을 확신하지 못한다. 왜 LinkedHashMap.keySet()은 Set의 하위 클래스를 고정 된 순서로 반환하지 않습니까? – Armand

+4

SortedSet를 돌려 주었기 때문에, LinkedHashMap는, 그 키가 Comparable를 구현하는 형태, 또는 Comparator 함수가 제공되는 필요 조건을 추가하는 것이됩니다. 이것은 Map이 요구하지 않습니다. SortedSet 설명서를 확인하십시오. http://download.oracle.com/javase/6/docs/api/java/util/SortedSet.html. 이 요구 사항을 갖지 않으면 LinkedHashMap에서 Comparable을 구현하지 않는 짝수 키를 사용할 수 있습니다. 이는보다 일반적인 경우입니다. LinkedHashMap의 구현은, 그 키가 Comparable 인 경우에서도 SortedSet를 돌려 줄지도 모릅니다 만, 간단하게 REQUIRED는 필요 없습니다. –

+1

물론 LinkedHashMap의 계약에 따르면 자연 주문이 아닌 INSERTION 주문이 유지됩니다. 따라서이 경우 SortedSet은 전혀 작동하지 않을 것입니다. 키는 단순히 그 방식으로 정렬되지 않습니다. –

32

Yes. 단, 키가 다시 삽입되면 키가 처음 삽입 된 순서대로 나타납니다.

+4

+1 그 코너 케이스에 잘 잡습니다. –

+3

사실, 키가 ** 재 삽입 **되었을 때 예외는 삭제되지 않고 재사용되지 않습니다.이 경우는 이미 맵에있는 키에 대해'put (key, value)'를 호출 할 때입니다. (javadoc이이를 명확하게 설명합니다.) –

관련 문제