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.