จากเอกสารJava 1.6 Collection Framework :
คอลเลกชันที่ไม่สนับสนุนการดำเนินการปรับเปลี่ยนใด ๆ (เช่น
add
,remove
และclear
) จะเรียกว่าunmodifiable [ ... ] คอลเลกชันที่ยังรับประกันว่าการเปลี่ยนแปลงในวัตถุเก็บไม่เคยจะมองเห็นได้จะเรียกว่าไม่เปลี่ยนรูป
เกณฑ์ที่สองทำให้ฉันสับสนเล็กน้อย เนื่องจากคอลเล็กชันแรกไม่สามารถแก้ไขได้และสมมติว่าการอ้างอิงคอลเลกชันดั้งเดิมถูกกำจัดออกไปการเปลี่ยนแปลงที่อ้างถึงในบรรทัดที่สองคืออะไร? มันหมายถึงการเปลี่ยนแปลงขององค์ประกอบที่อยู่ในคอลเลกชันเช่นสถานะขององค์ประกอบหรือไม่?
คำถามที่สอง:
เพื่อให้คอลเลกชันไม่เปลี่ยนรูปจะต้องดำเนินการอย่างไรในการจัดหาผู้รับประกันเพิ่มเติมที่ระบุไว้ หากสถานะขององค์ประกอบในคอลเล็กชันถูกอัพเดตโดยเธรดจะเพียงพอสำหรับความไม่เปลี่ยนรูปหรือไม่ที่การอัปเดตเหล่านั้นในสถานะจะไม่ปรากฏบนเธรดที่มีคอลเล็กชันที่ไม่เปลี่ยนรูป
เพื่อให้คอลเลกชันไม่เปลี่ยนรูปจะมีวิธีการอย่างไรในการให้การค้ำประกันเพิ่มเติมที่ระบุไว้?
newCol = oldCol.add("element")
จะสร้างคอลเลคชันใหม่ที่เป็นสำเนาเก่าพร้อมองค์ประกอบอีก 1 รายการและการอ้างอิงทั้งหมดของoldCol
พินัยกรรมยังคงชี้ไปที่คอลเลคชันเก่าที่ไม่มีการเปลี่ยนแปลง