171 votes

Comment puis-je cloner une Liste générique en Java?

J'ai un ArrayList<String> que j'aimerais retourner une copie de. ArrayList a une méthode clone a la signature suivante:

public Object clone()

Après j'appelle cette méthode, comment puis-je convertir l'Objet retourné en arrière pour ArrayList<String>?

340voto

Pourquoi voudriez-vous clone? La création d'une nouvelle liste généralement plus de sens.

List<String> strs;
...
List<String> newStrs = new ArrayList<String>(strs);

Le travail est accompli.

63voto

Vinko Vrsalovic Points 116138
ArrayList newArrayList = (ArrayList) oldArrayList.clone();

19voto

GeRmAn Points 71

C'est le code que j'utilise:

ArrayList copy = new ArrayList (original.size);
Collections.copy(copy, original);

L'espoir est utile pour vous

17voto

Julien Chastang Points 8357

Être informé de l'Objet.clone() a quelques problèmes majeurs, et son utilisation est déconseillée dans la plupart des cas. Veuillez consulter l'Article 11, à partir de "Effective Java" par Joshua Bloch pour une réponse complète. Je crois que vous pouvez utiliser en toute sécurité des Objets.clone() de type primitif, des tableaux, mais en dehors de cela, vous devez être judicieux dans le choix d'utilisation et de primordial clone. Vous êtes probablement mieux de la définition d'un constructeur de copie ou d'un statique méthode de fabrique explicitement les clones de l'objet en fonction de votre sémantique.

15voto

Kamikaze Mercenary Points 9341

Je pense que cela devrait faire l'affaire à partir des Collections de l'API:

Remarque: la méthode de copie s'exécute en temps linéaire.

//assume oldList exists and has data in it.
List<String> newList = new ArrayList<String>();
Collections.copy(newList, oldList);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X