7
votes

Comment faire une copie de l'objet ArrayList Type de liste?

J'ai étudié que Java passe des références d'objet par valeur et afin de faire une copie locale d'un objet, je peux faire du clonage () ou du constructeur de copie. J'ai également examiné une copie profonde / peu profonde ainsi que plusieurs messages sur le débordement de pile.

Je regarde cet exemple: xxx

Seuls quelques articles que j'ai lu mentionné ArrayList met en œuvre la clonable, mais ne dit pas vraiment comment créer une copie locale de "liste" si le type est la liste, pas une arracheliste qui ne met pas en œuvre clonable.

Je peux appeler clone () si "liste" est le type de arraylist. xxx

mais si le type est la liste, je ne peux pas.

Dois-je simplement utiliser le constructeur de copie comme ci-dessous pour créer une copie locale pour créer une copie locale ? Quelle est la meilleure façon de faire une copie de "liste"? xxx


0 commentaires

3 Réponses :


5
votes

Passer la liste dans le constructeur est probablement le meilleur moyen d'y aller. L'invocation du constructeur lui-même utilisera, dans les coulisses, System.ArrayCopy. Cela détachera donc efficacement la copie locale de la liste transmise à travers le constructeur.


0 commentaires

0
votes

Utilisez le constructeur de copie quand vous le pouvez. clone () est obsolète et ne doit pas être utilisé (ni implémenté) dans le nouveau code.

Si vous étendez une classe qui Implexes Clonable , vous avez peu de choix, mais pour mettre en place une méthode de clone bien élevée . Sinon, vous ferez mieux de fournir un moyen alternatif de copie d'objet, ou simplement ne pas fournir la capacité. [...] une approche fine de la copie d'objet consiste à fournir un copy constructeur ou ou usine de copie . [...]

donné tous les problèmes liés à clonable , il est prudent de dire que D'autres interfaces ne doivent pas l'étendre et que les classes conçues pour l'héritage (Point 17) ne devrait pas la mettre en œuvre. À cause de ses nombreuses lacunes, certaines Les programmeurs experts choisissent simplement de ne jamais remplacer la méthode clone et jamais Pour l'appeler sauf, peut-être, pour copier des tableaux.

de Efficace Java 2nd édition , point 11.


2 commentaires

Je ne comprends pas. Quels sont tous les "problèmes associés à clonable", et pourquoi sont-ils si mauvais que vous ne devriez même jamais invoquer it?


@Russellsilva, jtechies.blogspot.hu/2012/07 / ...



0
votes

Il semble que vous souhaitiez rendre votre collection non modifiée afin que vous puissiez utiliser collections.unmodifiablelist () .


0 commentaires