Ho deciso di scrivere un elenco collegato singolarmente e ho avuto il piano per rendere immutabile la struttura del nodo collegato interno.
Mi sono imbattuto in un intoppo però. Supponiamo di avere i seguenti nodi collegati (dalle addoperazioni precedenti ):
1 -> 2 -> 3 -> 4
e dire che voglio aggiungere a 5 .
Per fare ciò, poiché il nodo 4è immutabile, devo creare una nuova copia di 4, ma sostituire il suo nextcampo con un nuovo nodo contenente un 5. Il problema è ora, 3si riferisce al vecchio 4; quello senza l'aggiunta 5. Ora devo copiare 3e sostituire il suo nextcampo per fare riferimento alla 4copia, ma ora 2fa riferimento al vecchio3 ...
O in altre parole, per fare un'appendice, sembra che l'intero elenco debba essere copiato.
Le mie domande:
Il mio pensiero è corretto? C'è un modo per fare un'appendice senza copiare l'intera struttura?
Apparentemente "Java efficace" contiene la raccomandazione:
Le lezioni dovrebbero essere immutabili a meno che non ci siano ottime ragioni per renderle mutabili ...
È un buon caso di mutabilità?
Non penso che questo sia un duplicato della risposta suggerita poiché non sto parlando dell'elenco stesso; che ovviamente deve essere mutabile per conformarsi all'interfaccia (senza fare qualcosa come mantenere la nuova lista internamente e recuperarla tramite un getter. A pensarci bene, anche se ciò richiederebbe qualche mutazione; sarebbe solo ridotto al minimo). Sto parlando se gli interni dell'elenco devono essere immutabili.

CopyOnWritexxxclassi incredibilmente costose utilizzate per il multi-threading. Nessuno si aspetta che le collezioni siano davvero immutabili (anche se crea alcune stranezze)