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 add
işlemlerden):
1 -> 2 -> 3 -> 4
ve eklemek istediğimi söyle 5
.
Bunu yapmak için, düğüm 4
değişmez olduğu için, yeni bir kopyasını oluşturmam gerekiyor 4
, ancak next
alanını a içeren yeni bir düğümle değiştirmem gerekiyor 5
. Şimdi sorun, 3
eskisine gönderme yapmak 4
; ekli olmayan 5
. Şimdi kopyaya başvurmalı ve kopyayı referans almak için 3
kendi next
alanını değiştirmem gerekiyor 4
, ama şimdi 2
eskisine 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