이해할 수없는 Immutable 컬렉션의 결함이 정확한지 확신 할 수 없으므로이 대답에 나열합니다. 누군가가 나를 여기에서 교정하기를 바랍니다.불변의 불법 복제품 모음에 결함이 있습니까?
a) : ImmutableXXX.copyOf() 은 Collections.unmodifiableXXX()와 비교하여 소스 수집 기능을 잃습니다. 예를 들어, linkedList가 ImmutableList.copyOf()에 삽입되면 ImmutableList는 더 이상 링크되지 않습니다. Tree 기반 컬렉션과 동일합니다.
b) : 사람들은 Collections.unmodifiableXXX가 소스 컬렉션의 동일한 참조를 사용하기 때문에 소스 컬렉션이 변경되면 Collections.unmodifiableXXX도 변경됩니다. 하지만 내 솔루션은 ImmutableXXX.copyOf()에 전달되는 임시 컬렉션에 소스 컬렉션을 래핑하는 것입니다. 아래 코드를 참조하십시오 :
List<String> l = new ArrayList<String>();
List<String> unmodifiableList = Collections.unmodifiableList(l);
ImmutableList<String> immutableList= ImmutableList.copyOf(l);
l.add("a");//unmodifiableList is also added "a", immutableList not.
/*My solution as follows:
So unmodifiableList2 is also immutable as ImmutableList.copyOf(l) does*/
List<String> unmodifiableList2= Collections.unmodifiableList(new ArrayList(l));
Immutable 컬렉션에 대한 이해는 어떻습니까? 감사!
통찰력있는 답. 고맙습니다! –
+1 아주 좋은 설명입니다. – Premraj