415 votes

Faire copie du tableau Java

J'ai été confronté à ce problème pour un certain temps maintenant et il commence vraiment à me frustrer.

J'ai un tableau qui est constamment mis à jour. Permet de dire A = [1,2,3,4,5]. J'ai besoin de faire une copie exacte copie de l'Un et de l'appeler B. Si l'Un venait à changer d' [6,7,8,9,10], B doit toujours être [1,2,3,4,5]. Quelle est la meilleure façon de le faire? J'ai essayé avec une boucle for comme:

for(int i=0; i<5; i++){
   B[i]=A[i]
}

mais ça ne semble pas fonctionner correctement? S'il vous plaît aider? Et merci de ne pas utiliser avancées comme la copie en profondeur, etc, car je ne sais pas ce que cela signifie.

Merci

643voto

Bala R Points 57552

Vous pouvez essayer d’utiliser System.arraycopy()

249voto

MeBigFatGuy Points 12489

vous pouvez utiliser

aussi bien.

204voto

Evgeniy Dorofeev Points 52031

Si vous voulez faire une copie de

C’est la voie à suivre

peut être plus rapide que sur les petits tableaux. Les deux éléments copie tout aussi rapidement mais clone() retourne donc compilateur doit insérer un cast implicite de , vous pouvez le voir dans le bytecode, quelque chose comme ceci

37voto

Stephen C Points 255558

J'ai le sentiment que tous ces "meilleures manières de copier un tableau" ne sont pas vraiment à résoudre votre problème.

Vous dites

J'ai essayé avec une boucle for comme [...] mais ça ne semble pas fonctionner correctement?

En regardant en boucle, il n'y a pas de raison évidente pour elle de ne pas travailler ... à moins que:

  • vous en quelque sorte l' a et b tableaux foiré (par exemple, a et b reportez-vous à la même matrice), ou
  • vous êtes à l'application est multi-thread et les différents threads sont la lecture et la mise à jour de l' a tableau simultanément.

Dans les deux cas, d'autres moyens de faire la copie ne suffit pas à résoudre le problème sous-jacent.

Le correctif pour le premier scénario est évident. Pour le deuxième scénario, vous allez devoir trouver un moyen de les synchroniser les threads. Atomique tableau des classes ne pas les aider car ils n'ont pas atomique copie des constructeurs ou des clone méthodes, mais la synchronisation à l'aide d'une primitive mutex fera l'affaire.

(Il y a des indices dans votre question, qui me conduisent à penser que c'est effectivement fil; par exemple, votre relevé qu' a est en constante évolution.)

9voto

Cherry Points 972

Toute solution qui appellent la longueur du tableau, ajoutez votre exemple de code redondant checkersconsider null :

Je vous recommande ne pas inventer la roue et utiliser la classe utilitaire où toutes les vérifications nécessaires ont déjà joué. Examiner les ArrayUtils de communes d’apache. Vous codez deviennent plus courtes :

Communes d’Apache, vous pouvez trouver

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