Ich beschloss, eine einfach verknüpfte Liste zu schreiben, und plante, die interne verknüpfte Knotenstruktur unveränderlich zu machen.
Ich bin allerdings auf einen Haken gestoßen. Angenommen, ich habe die folgenden verknüpften Knoten (aus früheren addVorgängen):
1 -> 2 -> 3 -> 4
und sagen, ich möchte eine anhängen 5.
Da der Knoten 4unveränderlich ist, muss ich dazu eine neue Kopie von erstellen 4, aber sein nextFeld durch einen neuen Knoten ersetzen, der a enthält 5. Das Problem ist jetzt, 3auf das alte zu verweisen 4; der ohne das angehängte 5. Jetzt muss ich kopieren 3und das nextFeld ersetzen, um auf die 4Kopie zu verweisen , aber jetzt 2wird auf die alte 3...
Mit anderen Worten, um einen Anhang zu erstellen, muss anscheinend die gesamte Liste kopiert werden.
Meine Fragen:
Ist mein Denken richtig? Gibt es eine Möglichkeit zum Anhängen, ohne die gesamte Struktur zu kopieren?
Anscheinend enthält "Effective Java" die Empfehlung:
Klassen sollten unveränderlich sein, es sei denn, es gibt einen sehr guten Grund, sie veränderlich zu machen ...
Ist dies ein guter Grund für die Wandlungsfähigkeit?
Ich denke nicht, dass dies ein Duplikat der vorgeschlagenen Antwort ist, da ich nicht über die Liste selbst spreche. das muss natürlich veränderbar sein, um mit der Schnittstelle übereinzustimmen (ohne die neue Liste intern zu behalten und über einen Getter abzurufen. Auf den zweiten Blick würde dies jedoch eine gewisse Veränderung erfordern; es würde nur auf ein Minimum beschränkt sein). Ich spreche darüber, ob die Interna der Liste unveränderlich sein müssen oder nicht.

CopyOnWritexxxKlassen, die für Multithreading verwendet werden. Niemand erwartet, dass Sammlungen wirklich unveränderlich sind (obwohl es einige Macken schafft)