ฉันตัดสินใจเขียนรายการที่ลิงก์เดี่ยว ๆ และมีแผนที่จะทำให้โครงสร้างโหนดเชื่อมโยงภายในไม่เปลี่ยนรูป
ฉันวิ่งเข้าไปในอุปสรรค์ ว่าฉันมีโหนดเชื่อมโยงต่อไปนี้ (จากadd
การดำเนินการก่อนหน้า):
1 -> 2 -> 3 -> 4
5
และบอกว่าผมต้องการที่จะผนวก
การทำเช่นนี้ตั้งแต่โหนด4
จะไม่เปลี่ยนรูปฉันต้องสร้างสำเนาใหม่ของ4
แต่แทนที่ของสนามใหม่ที่มีโหนดnext
5
ปัญหาคือตอนนี้3
กำลังอ้างอิงเก่า4
; 5
หนึ่งโดยไม่ต้องต่อท้าย ตอนนี้ฉันต้องการคัดลอก3
และแทนที่next
ฟิลด์เพื่ออ้างอิง4
สำเนา แต่ตอนนี้2
กำลังอ้างอิงเก่า3
...
หรือกล่าวอีกนัยหนึ่งเมื่อต้องการต่อท้ายรายการทั้งหมดจะต้องคัดลอก
คำถามของฉัน:
ความคิดของฉันถูกต้องหรือไม่ มีวิธีการผนวกโดยไม่คัดลอกโครงสร้างทั้งหมดหรือไม่
เห็นได้ชัดว่า "จาวาที่มีประสิทธิภาพ" มีคำแนะนำ:
คลาสควรจะไม่เปลี่ยนรูปเว้นแต่จะมีเหตุผลที่ดีมากที่ทำให้พวกเขาเปลี่ยนแปลงได้ ...
นี่เป็นกรณีที่ดีสำหรับการเปลี่ยนแปลงหรือไม่?
ฉันไม่คิดว่านี่เป็นคำตอบที่ซ้ำกันเนื่องจากฉันไม่ได้พูดถึงรายการ เห็นได้ชัดว่าจะต้องมีการเปลี่ยนแปลงเพื่อให้สอดคล้องกับอินเทอร์เฟซ (โดยไม่ต้องทำอะไรบางอย่างเช่นการรักษารายการใหม่ภายในและดึงมันออกมาผ่านทะเยอทะยานในความคิดที่สองแม้ว่าแม้จะต้องมีการกลายพันธุ์; ฉันกำลังพูดถึงว่า internals ของรายการจะต้องไม่เปลี่ยนรูป
CopyOnWritexxx
ชั้นเรียนที่มีราคาแพงอย่างไม่น่าเชื่อที่ใช้สำหรับการมัลติเธรด ไม่มีใครคาดว่าคอลเลกชันที่จะไม่เปลี่ยนรูปจริงๆ (แม้ว่ามันจะสร้างนิสัยใจคอบาง)