Ho deciso di scrivere una lista collegata in modo univoco e ho implementato il piano per rendere immutabile la struttura del nodo collegato interno.
Tuttavia ho incontrato un problema. Supponiamo che io abbia i seguenti nodi collegati (da precedenti% operazioniadd):
1 -> 2 -> 3 -> 4
e di aggiungere un 5 .
Per fare ciò, poiché il nodo 4 è immutabile, ho bisogno di creare una nuova copia di 4 , ma sostituire il suo campo next con un nuovo nodo contenente un 5 . Il problema ora è che 3 fa riferimento al vecchio 4 ; quello senza il% co_de aggiunto. Ora ho bisogno di copiare 5 e sostituire il suo campo 3 per fare riferimento alla copia next , ma ora 4 fa riferimento al vecchio 2 ...
In altre parole, per fare un'app, è necessario copiare l'intero elenco.
Le mie domande:
-
Il mio pensiero è corretto? C'è un modo per fare un'app senza copiare l'intera struttura?
-
Apparentemente "Effective Java" contiene la raccomandazione:
Classes should be immutable unless there's a very good reason to make them mutable...
Questo è un buon esempio di mutabilità?
Non penso che questo sia un duplicato della risposta suggerita poiché non sto parlando della lista stessa; 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 semplicemente ridotto al minimo). Sto parlando se l'interno della lista debba essere immutabile o meno.