2011-03-04 3 views
4

Colelction.unmodifiableMap은 반복 순서를 보호합니까?Collection.unmodifiableMap 반복 순서

newMap.put (key, Collections.ModifiableMap (oldMap)) 시도 중 그러면 newMap.get (key)를 수행하고 반복 할 때 반복 순서가 변경된 것 같습니다.

반복 순서를 어떻게 보호 할 수 있습니까?

답변

4

체크 아웃 Collections.unmodifiableSortedMap. 그렇게하면지도에 대한 읽기 전용보기가 제공되고 정렬 된 키 순서가 유지됩니다.

+0

저자는 주석에 대해서만 언급했지만 SortedMap과는 다른 반복 순서를 갖는 LinkedHashMap을 사용하고 있습니다. 'Collections.unmodifiableSortedMap'는 java.util.Collections 클래스의 메소드 unmodifiableSortedMap을 주어진 타입에 적용 할 수 없습니다. [오류] 필수 : ​​java.util.SortedMap [오류] 이유 : 유형 변수 K, V를 추론 할 수 없습니다 [오류] (인수 불일치, 링크 불일치, java.util.LinkedHashMap (java.lang.String, java.lang.Class> java.util.SortedMap )로 변환 할 수 없습니다. – yegeniy

4

UnmodifiableMap은 모든 메소드를 위임하기 만합니다. 순서는 대리인의 순서입니다.

첫 번째 컬렉션과 동일한 순서가 필요할 경우 LinkedHashMap을 사용하십시오.

+0

사실, LinkedHashMap을 사용하고 있습니다. – Chandra

1

Collections.unmodifiableMap의 소스를 살펴보면 UnmodifiableMap 클래스에 전달된다는 것을 알 수 있습니다. UnmodifiableMap 클래스는 단순히이를 래핑합니다. 따라서 기본지도의 순서는 변경되지 않습니다.

그리고 unmodifiableMap에 대한 설명서에 따라 그것을 말한다

:

는 지정된 맵의 변경 불가능한 뷰를 돌려줍니다. 그것은이 보기를 반환 말한다 때문에

, 우리가 다른지도, 오래 된지도에 액세스 할 수 단지 다른 방법을 못하고 있다는 것을 의미한다.

+2

동일하지만 수정 불가능한 맵이 실제 색상을 드러 냈습니다. 내가 그것을 시도했을 때 :) – Chandra