Decidí escribir una lista vinculada individualmente y tenía el plan en marcha para hacer que la estructura del nodo interno vinculado fuera inmutable.
Sin embargo, me encontré con un inconveniente. Digamos que tengo los siguientes nodos vinculados (de addoperaciones anteriores ):
1 -> 2 -> 3 -> 4
y decir que quiero agregar a 5.
Para hacer esto, dado que el nodo 4es inmutable, necesito crear una nueva copia de 4, pero reemplazar su nextcampo con un nuevo nodo que contenga un 5. El problema ahora 3es hacer referencia a lo viejo 4; el que no tiene el anexo 5. Ahora necesito copiar 3y reemplazar su nextcampo para hacer referencia a la 4copia, pero ahora 2hace referencia al viejo 3...
O, en otras palabras, para hacer un apéndice, parece que se necesita copiar toda la lista.
Mis preguntas:
¿Es correcto mi pensamiento? ¿Hay alguna forma de hacer un anexo sin copiar toda la estructura?
Aparentemente, "Java efectivo" contiene la recomendación:
Las clases deben ser inmutables a menos que haya una muy buena razón para hacerlas mutables ...
¿Es este un buen caso para la mutabilidad?
No creo que este sea un duplicado de la respuesta sugerida ya que no estoy hablando de la lista en sí; eso obviamente tiene que ser mutable para ajustarse a la interfaz (sin hacer algo como mantener la nueva lista internamente y recuperarla a través de un getter. Sin embargo, pensándolo bien, incluso eso requeriría algo de mutación; simplemente se mantendría al mínimo). Estoy hablando de si las partes internas de la lista deben ser inmutables o no.

CopyOnWritexxxclases increíblemente caras que se usan para subprocesos múltiples. Nadie espera que las colecciones sean realmente inmutables (aunque crea algunas peculiaridades)