2011-12-21 3 views
2

Quel est le meilleur de cloner un LinkedHasMap en Java?Clonage d'un java LinkedHashMap

J'ai déjà essayé:

Map<String, Object> clonedMap = new LinkedHashMap<String, Object>(originalMap); 

Mais cela n'a pas fonctionné.

+0

Pourquoi cela n'a-t-il pas fonctionné? Que veux-tu qu'il fasse? – SLaks

+6

Définir "ne fonctionne pas". 'new Map (map)' fait une copie "peu profonde" - les références sont les mêmes. Si vous voulez dire une copie "profonde" (où toutes les clés et les valeurs sont * aussi * clonées), la réponse dépend entièrement de l'implémentation des classes clé et valeur. – Bohemian

+1

Comme l'a dit Bohème, une copie profonde est probablement ce que vous recherchez. Voir [ici] (http://stackoverflow.com/questions/64036/how-do-you-make-a-deep-copy-of-an-object-in-java). – threenplusone

Répondre

1

La méthode la plus simple pour obtenir une copie en profondeur consiste à sérialiser la carte, puis à la désérialiser. Le moyen le plus rapide est d'aller sur toute la carte, de cloner chaque clé/valeur et de la placer sur une nouvelle carte.

Dans le cas où vous avez besoin d'une copie superficielle - votre extrait fait cela correctement.

+0

Bien que la sérialisation soit une solution simple, si vous voulez quelque chose d'automatique, je préfère utiliser la réflexion. Mais mieux vaut que toutes vos classes clonables implémentent l'interface Cloneable (http://docs.oracle.com/javase/6/docs/api/java/lang/Cloneable.html). –