"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo se crea una copia fiel de una matriz bidimensional en Java sin consecuencias no deseadas?

¿Cómo se crea una copia fiel de una matriz bidimensional en Java sin consecuencias no deseadas?

Publicado el 2024-11-17
Navegar:698

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

Copiar una matriz bidimensional de manera efectiva en Java

Cuando se trabaja con matrices bidimensionales, a menudo es necesario crear una copia de la matriz original para preservar sus valores originales. Sin embargo, las asignaciones directas como old = current pueden tener consecuencias no deseadas.

Comprensión de la asignación de matrices de Java

En Java, las matrices son objetos y las asignaciones entre matrices son referencias a la misma matriz subyacente. Por lo tanto, la actualización de una matriz afecta a la otra porque ambas apuntan a los mismos datos.

Métodos de copia incorrectos

Los métodos proporcionados, old() y keepold(), simplemente asigne referencias a las matrices. Como resultado, cuando actual se actualiza después de llamar a antiguo (), los cambios también se reflejan en antiguo. De manera similar, después de llamar a keepold(), actual se convierte en una referencia a antiguo, y cualquier actualización a antiguo se actualiza.

Copia efectiva con Streams API (Java 8)

Para crear una copia fiel de la matriz, es necesario realizar una copia profunda. La API de transmisiones introducida en Java 8 proporciona una manera eficiente de lograr esto usando el siguiente código:

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

Aquí, cada fila de la matriz de entrada (matriz en este ejemplo) se clona usando map(int[]::clone), creando un nuevo matriz para cada fila. El flujo resultante de matrices clonadas luego se convierte nuevamente en una matriz bidimensional usando toArray(int[][]::new). Este proceso garantiza que tanto la copia como la matriz original sean distintas y puedan modificarse de forma independiente.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3