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.
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