मूल रूप से unModifiable
संग्रह एक दृश्य है, इसलिए अप्रत्यक्ष रूप से यह अभी भी संशोधित किए जा सकने वाले कुछ अन्य संदर्भों से 'संशोधित' हो सकता है। इसके अलावा , यह एनुथ कलेक्शन के बारे में आसानी से देखा जा सकता है, जब स्रोत संग्रह में परिवर्तन नहीं होता है, तो संग्रहणीय संग्रह हमेशा नवीनतम मूल्यों के साथ मौजूद होगा।
हालाँकि immutable
संग्रह को दूसरे संग्रह की एक प्रतिलिपि के रूप में माना जा सकता है और इसे संशोधित नहीं किया जा सकता है। इस स्थिति में जब स्रोत संग्रह बदलता है, तो अपरिवर्तनीय संग्रह परिवर्तनों को प्रतिबिंबित नहीं करता है
इस अंतर की कल्पना करने के लिए यहां एक टेस्टकेस है।
@Test
public void testList() {
List<String> modifiableList = new ArrayList<String>();
modifiableList.add("a");
System.out.println("modifiableList:"+modifiableList);
System.out.println("--");
//unModifiableList
assertEquals(1, modifiableList.size());
List<String> unModifiableList=Collections.unmodifiableList(
modifiableList);
modifiableList.add("b");
boolean exceptionThrown=false;
try {
unModifiableList.add("b");
fail("add supported for unModifiableList!!");
} catch (UnsupportedOperationException e) {
exceptionThrown=true;
System.out.println("unModifiableList.add() not supported");
}
assertTrue(exceptionThrown);
System.out.println("modifiableList:"+modifiableList);
System.out.println("unModifiableList:"+unModifiableList);
assertEquals(2, modifiableList.size());
assertEquals(2, unModifiableList.size());
System.out.println("--");
//immutableList
List<String> immutableList=Collections.unmodifiableList(
new ArrayList<String>(modifiableList));
modifiableList.add("c");
exceptionThrown=false;
try {
immutableList.add("c");
fail("add supported for immutableList!!");
} catch (UnsupportedOperationException e) {
exceptionThrown=true;
System.out.println("immutableList.add() not supported");
}
assertTrue(exceptionThrown);
System.out.println("modifiableList:"+modifiableList);
System.out.println("unModifiableList:"+unModifiableList);
System.out.println("immutableList:"+immutableList);
System.out.println("--");
assertEquals(3, modifiableList.size());
assertEquals(3, unModifiableList.size());
assertEquals(2, immutableList.size());
}
उत्पादन
modifiableList:[a]
--
unModifiableList.add() not supported
modifiableList:[a, b]
unModifiableList:[a, b]
--
immutableList.add() not supported
modifiableList:[a, b, c]
unModifiableList:[a, b, c]
immutableList:[a, b]
--