"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como você cria uma cópia verdadeira de um array bidimensional em Java sem consequências indesejadas?

Como você cria uma cópia verdadeira de um array bidimensional em Java sem consequências indesejadas?

Publicado em 17/11/2024
Navegar:690

How do you create a true copy of a two-dimensional array in Java without unintended consequences?

Copiando efetivamente um array bidimensional em Java

Ao trabalhar com arrays bidimensionais, muitas vezes é necessário criar uma cópia de a matriz original para preservar seus valores originais. No entanto, atribuições diretas como antigo = atual podem levar a consequências não intencionais.

Compreendendo a atribuição de array Java

Em Java, arrays são objetos e atribuições entre arrays são referências para a mesma matriz subjacente. Portanto, atualizar um array afeta o outro porque ambos apontam para os mesmos dados.

Métodos de cópia incorretos

Os métodos fornecidos, old() e keepold(), simplesmente atribua referências aos arrays. Como resultado, quando current é atualizado após chamar old(), as alterações também são refletidas em old. Da mesma forma, depois de chamar keepold(), current se torna uma referência ao antigo, e quaisquer atualizações do antigo atualizam o atual.

Cópia efetiva com a API Streams (Java 8 )

Para criar uma cópia verdadeira do array, é necessário realizar uma cópia profunda. A API de streams introduzida no Java 8 fornece uma maneira eficiente de conseguir isso usando o seguinte código:

int[][] copy = Arrays.stream(matrix).map(int[]::clone).toArray(int[][]::new);

Aqui, cada linha da matriz de entrada (matriz neste exemplo) é clonada usando map(int[]::clone), criando um novo matriz para cada linha. O fluxo resultante de arrays clonados é então convertido novamente em um array bidimensional usando toArray(int[][]::new). Este processo garante que a cópia e a matriz original sejam distintas e possam ser modificadas independentemente.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3