Về cơ bản unModifiable
Bộ sưu tập là một khung nhìn, do đó, gián tiếp nó vẫn có thể được 'sửa đổi' từ một số tham chiếu khác có thể sửa đổi. Ngoài ra, đây chỉ là chế độ xem chỉ đọc của bộ sưu tập ann ann, Khi bộ sưu tập nguồn thay đổi Bộ sưu tập không thể thay đổi sẽ luôn xuất hiện với các giá trị mới nhất.
Tuy nhiên, immutable
Bộ sưu tập có thể được coi là một bản sao chỉ đọc của bộ sưu tập khác và không thể sửa đổi. Trong trường hợp này khi bộ sưu tập nguồn thay đổi, Bộ sưu tập không thay đổi không phản ánh các thay đổi
Dưới đây là một thử nghiệm để hình dung sự khác biệt này.
@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());
}
Đầu ra
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]
--