J'ai décidé d'écrire une liste à liaison unique et j'avais le plan pour rendre la structure de nœud liée interne immuable.
Je suis tombé sur un hic cependant. Disons que j'ai les nœuds liés suivants (des addopérations précédentes ):
1 -> 2 -> 3 -> 4
et dire que je veux ajouter un 5.
Pour ce faire, étant donné que le nœud 4est immuable, je dois créer une nouvelle copie de 4, mais remplacer son nextchamp par un nouveau nœud contenant un 5. Le problème est maintenant, 3fait référence à l'ancien 4; celui sans l'annexe 5. Maintenant, je dois copier 3et remplacer son nextchamp pour référencer la 4copie, mais fait maintenant 2référence à l'ancien 3...
Ou en d'autres termes, pour faire un ajout, la liste entière semble avoir besoin d'être copiée.
Mes questions:
Ma pensée est-elle correcte? Existe-t-il un moyen de faire un ajout sans copier toute la structure?
Apparemment, "Java efficace" contient la recommandation:
Les classes doivent être immuables à moins qu'il n'y ait une très bonne raison de les rendre mutables ...
Est-ce un bon cas de mutabilité?
Je ne pense pas que ce soit un double de la réponse suggérée car je ne parle pas de la liste elle-même; cela doit évidemment être modifiable pour se conformer à l'interface (sans faire quelque chose comme garder la nouvelle liste en interne et la récupérer via un getter. Je veux savoir si les éléments internes de la liste doivent être immuables.

CopyOnWritexxxclasses incroyablement coûteuses utilisées pour le multi-threading. Personne ne s'attend vraiment à ce que les collections soient immuables (bien que cela crée des bizarreries)