Tek bağlantılı bir liste yazmaya karar verdim ve iç bağlantılı düğüm yapısını değiştirilemez hale getirme planım vardı.
Yine de bir engelle karşılaştım. Aşağıdaki bağlantılı düğümlere sahip olduğumu söyleyin (önceki addişlemlerden):
1 -> 2 -> 3 -> 4
ve eklemek istediğimi söyle 5.
Bunu yapmak için, düğüm 4değişmez olduğu için, yeni bir kopyasını oluşturmam gerekiyor 4, ancak nextalanını a içeren yeni bir düğümle değiştirmem gerekiyor 5. Şimdi sorun, 3eskisine gönderme yapmak 4; ekli olmayan 5. Şimdi kopyaya başvurmalı ve kopyayı referans almak için 3kendi nextalanını değiştirmem gerekiyor 4, ama şimdi 2eskisine gönderme yapıyor 3...
Başka bir deyişle, bir ekleme yapmak için, tüm listenin kopyalanması gerekiyor gibi görünüyor.
Sorularım:
Düşüncem doğru mu? Tüm yapıyı kopyalamaksızın ekleme yapmanın bir yolu var mı?
Görünüşe göre "Etkili Java" tavsiyeyi içeriyor:
Sınıflar değişken olmalarını sağlamak için çok iyi bir neden olmadıkça değişmez olmalıdır ...
Bu değişkenlik için iyi bir durum mu?
Bunun önerilen yanıtın bir kopyası olduğunu sanmıyorum çünkü listenin kendisinden bahsetmiyorum; arayüze uymak için değişken olması gerektiği açıktır (yeni listeyi dahili olarak tutmak ve bir alıcı aracılığıyla almak gibi bir şey yapmadan yapın. İkinci düşünceye rağmen, biraz mutasyon gerektirecek olsa bile, sadece minimumda tutulacaktır). Listenin iç kısımlarının değişmez olması gerekip gerekmediğinden bahsediyorum.

CopyOnWritexxxçoklu iş parçacığı için kullanılan inanılmaz pahalı sınıflardır. Kimse koleksiyonların gerçekten değişmez olmasını beklemiyor (bazı tuhaflıklar