Copier efficacement un tableau à deux dimensions en Java
Lorsque vous travaillez avec des tableaux à deux dimensions, il est souvent nécessaire de créer une copie de le tableau d'origine pour conserver ses valeurs d'origine. Cependant, les affectations directes telles que old = current peuvent avoir des conséquences inattendues.
Comprendre l'affectation des tableaux Java
En Java, les tableaux sont des objets et les affectations entre tableaux sont des références. au même tableau sous-jacent. Par conséquent, la mise à jour d'un tableau affecte l'autre car ils pointent tous les deux vers les mêmes données.
Méthodes de copie incorrectes
Les méthodes fournies, old() et keepold(), attribuez simplement des références aux tableaux. Par conséquent, lorsque current est mis à jour après avoir appelé old(), les modifications sont également reflétées dans old. De même, après avoir appelé keepold(), current devient une référence à old et toutes les mises à jour vers old update current.
Copie efficace avec l'API Streams (Java 8)
Pour créer une copie fidèle du tableau, il est nécessaire d'effectuer une copie complète. L'API streams introduite dans Java 8 fournit un moyen efficace d'y parvenir en utilisant le code suivant :
int[][] copy = Arrays.stream(matrix).map(int[]::clone).toArray(int[][]::new);
Ici, chaque ligne du tableau d'entrée (matrice dans cet exemple) est clonée à l'aide de map(int[]::clone), créant un nouveau tableau pour chacun rangée. Le flux résultant de tableaux clonés est ensuite reconverti en un tableau bidimensionnel à l'aide de toArray(int[][]::new). Ce processus garantit que la copie et le tableau d'origine sont distincts et peuvent être modifiés indépendamment.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3