UnmodifiableMap (Java Collections) vs ImmutableMap (Google) [duplicate]
이 질문에 이미 답변이 있습니다.
- 변경 불가 vs 수정 불가 수집 6 답변
석고
데이터 캐시에 사용중인지도에 대한 참조를 반환해야하고 싶습니다.
질문
온라인에서 UnmodifiableMap 및 ImmutableMap에 대한 많은 참조를 참조지만 비교 / 대조하는 내용이 없습니다. Google / Guava가 자체 버전을 만든 타당한 이유가 검증을 생각합니다. 누군가가 무엇인지 말해 줄 수 있습니까?
앞으로도 계속 변경 될 수 있습니다. 수정 가능한지도에 대한 보기 일 뿐이며 백업지도의 변경 사항은 모두없는지도를 통해 볼 수 있습니다. 즉석 수없는 맵은 수없는 뷰에 대한 참조 만있는 사용자의 수정 만 방지합니다.
Map<String, String> realMap = new HashMap<String, String>();
realMap.put("A", "B");
Map<String, String> unmodifiableMap = Collections.unmodifiableMap(realMap);
// This is not possible: It would throw an
// UnsupportedOperationException
//unmodifiableMap.put("C", "D");
// This is still possible:
realMap.put("E", "F");
// The change in the "realMap" is now also visible
// in the "unmodifiableMap". So the unmodifiableMap
// has changed after it has been created.
unmodifiableMap.get("E"); // Will return "F".
이와 대조적으로 Guava의 ImmutableMap은 실제로 불변입니다 . 이 주어진 맵 의 실제 복사본 이며, 누구도이 ImmutableMap을 어떤 식 으로든 존재하지 않습니다.
업데이트 :
주석 에서 지적했듯이 , 변경 불가능한지도는 다음을 사용하여 표준 API로 만들 수도 있습니다.
Map<String, String> immutableMap =
Collections.unmodifiableMap(new LinkedHashMap<String, String>(realMap));
이렇게하면 주어진지도의 실제 복사본에 ImmutableMap
추가 할 수있는 기능 을 추가 할 수 있습니다.
ImmutableMap JavaDoc : doc 모습 보기
거기에 대한 정보가 있습니다.
여전히 변경 될 수있는 별도의 맵 뷰인 Collections.unmodifiableMap (java.util.Map)과 달리 ImmutableMap의 인스턴스는 자체 데이터를 포함하며 절대 변경하지 않습니다. ImmutableMap은 정적 최종 맵 ( "상수 맵")에 편리하며 호출자가 클래스에 제공되는 한 맵의 "방어 복사본"을 쉽게 만들 수 있습니다.
JDK는
Collections.unmodifiableXXX
메소드를 제공 하지만 우리의 의견 다루기 어렵고 장황 할 수 있습니다. 방어 복사본을 안전하지 않게 만들고 모든 곳에서 사용하는 것을 불쾌하게 만듭니다. 반환 된 컬렉션은 원래 컬렉션에 대한 참조를 비효율적으로 보유하지 않는 경우에만 진정으로 불변입니다. 데이터 구조에는 동시 수정 검사, 추가 공간을 포함하여 변경 가능한 컬렉션의 모든 오버 헤드가 여전히 있습니다. 해시 테이블 등
ImmutableMap은 null
값을 허용하지 않지만 허용 합니다 Collections.unmodifiableMap()
. 5 월에는 변경되지 않을 것 UnmodifiableMap
입니다. JavaDoc에서 :
반복 순서가있는 변경 불가능한 해시 기반 맵입니다. null 키 또는 값을 허용하지 않습니다.
여전히 변경 될 수있는 별도의 맵 뷰인 Collections.unmodifiableMap (java.util.Map)과 달리 ImmutableMap의 인스턴스는 자체 데이터를 포함하며 절대 변경하지 않습니다. ImmutableMap은 정적 최종 맵 ( "상수 맵")에 편리하며 호출자가 클래스에 제공되는 한 맵의 "방어 복사본"을 쉽게 만들 수 있습니다.
참고 URL : https://stackoverflow.com/questions/22636575/unmodifiablemap-java-collections-vs-immutablemap-google
'IT' 카테고리의 다른 글
HTML 요소 사이의 줄 바꿈 방지 (0) | 2020.09.09 |
---|---|
Spring CrudRepository를 공장 대소 문자 구분없는 쿼리 (0) | 2020.09.09 |
varchar () 열을 특정 값으로 제한 하시겠습니까? (0) | 2020.09.09 |
단위 테스트는 얼마나 깊습니까? (0) | 2020.09.08 |
고유 한 임의의 생성 생성 (0) | 2020.09.08 |