java copy array how copy clone an array java
Este tutorial sobre copia y clonación de matrices analiza los distintos métodos para copiar una matriz en Java:
Aquí discutiremos la operación de copia de matrices Java. Java proporciona varias formas en las que puede realizar copias de elementos de matriz. Como sabemos, en Java, las matrices pueden contener elementos de tipos primitivos u objetos o referencias.
Al hacer copias de tipos primitivos, la tarea es bastante fácil, pero cuando se trata de objetos o referencias, debe prestar atención a si la copia es profunda o superficial.
=> Eche un vistazo a la guía para principiantes de Java aquí.
La copia superficial hace una copia del elemento. No es un problema cuando se trata de tipos de datos primitivos. Pero cuando se trata de referencias, una copia superficial simplemente copiará el valor y no la información subyacente.
Por lo tanto, aunque haya realizado copias de elementos, un cambio en una copia también se reflejará en otra copia a medida que se comparten las ubicaciones de memoria. Para evitar esto, debe buscar una copia profunda en la que no se compartan las ubicaciones de la memoria.
Lo que vas a aprender:
Copiar y clonar matrices Java
Java le permite copiar matrices utilizando el método de copia directa proporcionado por java.util o la clase System. También proporciona un método de clonación que se utiliza para clonar una matriz completa.
En este tutorial, analizaremos los siguientes métodos de copia y clonación de matrices.
- Copia manual usando for loop
- Usando System.arraycopy ()
- Usando Arrays.copyOf ()
- Usando Arrays.copyOfRange ()
- Usando Object.clone ()
¡¡Vamos a explorar!!
Copia manual usando For Loop
Normalmente cuando copiamos variables, por ejemplo, ayb, realizamos la operación de copia de la siguiente manera:
a = b;
No va a funcionar correctamente si aplicamos el mismo método a las matrices.
Veamos un ejemplo de programación.
|_+_|Producción:
En el programa anterior, hay dos matrices, es decir, intArray y copyArray. La tarea es copiar el contenido de intArray en copyArray. Para hacer esto, se introduce la instrucción copyArray = intArray. Lo que se hace aquí es que se asignan las referencias de la matriz. Por lo tanto, esto no es una copia real.
Como resultado de la declaración anterior, la ubicación de la memoria de intArray también es compartida por copyArray. Ahora, cuando se incrementa el elemento copyArray, ese cambio también se refleja en el intArray. Esto se muestra en la salida.
Para superar este problema, empleamos un método para copiar la matriz usando for loop. Aquí, cada elemento de la matriz original se copia en la nueva matriz usando un bucle for.
Este programa se muestra a continuación.
|_+_|Producción:
Aquí hemos modificado el programa anterior para incluir for loop y dentro de for loop, asignamos cada elemento de intArray al elemento correspondiente de copyArray. De esta forma, los elementos se copian realmente. Entonces, cuando se modifica una matriz, los cambios no se reflejan en otra matriz.
Usando System.arraycopy ()
La clase System de Java tiene un método llamado 'ArrayCOpy' que le permite copiar elementos de una matriz a otra matriz.
El prototipo general de este método es el siguiente:
|_+_|Aquí,
- src_array => Matriz de origen desde donde se copiarán los contenidos.
- src_Pos => La posición en la matriz de origen desde donde comenzará la copia.
- dest_array => Matriz de destino en la que se copiarán los elementos.
- dest_Pos => Posición inicial en la matriz de destino de los elementos a copiar.
- largo => Longitud de la matriz a copiar.
Comprendamos este método con un ejemplo.
|_+_|Producción:
En el programa anterior, usamos el método 'arraycopy' para copiar una matriz a otra matriz. Puede ver la llamada al método arraycopy. Copiamos la matriz fuente desde el principio (0thlocation) y copie toda la matriz.
Por último, mostramos la cadena equivalente tanto de las matrices de origen como de destino.
Con el método arraycopy, puede copiar incluso matrices parciales, ya que toma las posiciones de los elementos inicial y final como argumentos. Este método realiza una copia superficial de los elementos de la matriz.
Usando Arrays.copyOf ()
El método Arrays.copyOf () utiliza internamente el método System.arraycopy (). Aunque no es tan eficiente como la copia de matriz, se puede usar para copiar una matriz completa o parcial al igual que el método de copia de matriz.
El método 'copyOf ()' es parte del paquete java.util y pertenece a la clase 'Arrays'.
El prototipo de este método es el siguiente:
|_+_|Dónde,
- original: La matriz que se copiará en la nueva matriz.
- newLength: La longitud de la matriz copiada que se devolverá.
Por lo tanto, este método hace una copia de la matriz proporcionada en el primer argumento a la longitud especificada truncando o rellenando la longitud con 0 en la nueva matriz. Esto significa que si la longitud de la matriz copiada es mayor que la matriz original, los 0 se reemplazan por los elementos restantes.
El programa que se muestra a continuación muestra un ejemplo del método copyOf.
|_+_|Producción:
En el programa anterior, copiamos el even_Array de longitud 4 usando el método copyOf. El segundo argumento proporcionado es 5. Por lo tanto, la nueva matriz copiada tiene 5 elementos. Los primeros cuatro son iguales a la matriz original y el quinto elemento es 0 como copyOf rellena porque la longitud de la matriz original es menor que la de la nueva matriz.
Usando Arrays.copyOfRange ()
El método Arrays.copyOfRange () se usa específicamente cuando desea copiar matrices parciales. Al igual que el método copyOf (), este método también utiliza internamente el método System.arraycopy ().
El prototipo del método Arrays.copyOfRange () es el siguiente:
|_+_|dónde,
- original: La matriz de la que se va a copiar un rango.
- desde: Índice inicial del rango a copiar, inclusive.
- a: El índice final del rango a copiar, exclusivo.
A continuación se muestra un ejemplo de implementación del método copyOfRange.
|_+_|Producción:
Usando Object.clone ()
La matriz de Java implementa internamente una interfaz clonable y, por lo tanto, es fácil clonar una matriz de Java. Puede clonar matrices unidimensionales y bidimensionales. Cuando clona una matriz unidimensional, hace una copia profunda de los elementos de la matriz que está copiando los valores.
Por otro lado, cuando clona matrices bidimensionales o multidimensionales, se realiza una copia superficial de los elementos, es decir, solo se copian las referencias. Esta clonación de matrices se realiza mediante el método 'Clone ()' proporcionado por las matrices.
Una copia profunda de matrices 1-D como resultado de la clonación se puede representar de la siguiente manera:
Ahora implementemos la clonación de matrices 1-D en un programa Java.
|_+_|Producción:
Como puede ver en la salida, la expresión para verificar la igualdad de ambas matrices devuelve falso. Esto se debe a que la clonación de una matriz unidimensional da como resultado una copia profunda en la que los valores se copian en una nueva matriz y no simplemente en referencias.
Preguntas frecuentes
P # 1) ¿Cómo hacer una copia de una matriz en Java?
Responder: Existen diferentes métodos para copiar una matriz.
- Puede usar un bucle for y copiar elementos de uno a otro uno por uno.
- Utilice el método de clonación para clonar una matriz.
- Utilice el método arraycopy () de la clase System.
- Utilice los métodos copyOf () o copyOfRange () de la clase Arrays.
P # 2) ¿Cómo se asigna una matriz a otra?
Responder: Puede asignar la matriz a otra usando un operador de asignación simple (=). Debe asegurarse de que las dos matrices sean del mismo tipo de datos y tengan una dimensión idéntica.
P # 3) ¿Qué es una copia superficial y una copia profunda?
Responder: En la copia superficial, solo se copian los atributos de los objetos o matrices en cuestión. Entonces, cualquier cambio en la matriz copiada se reflejará en el original. La clonación de Java es un ejemplo de copia superficial.
convertidor de youtube a mp4 para android
Una copia profunda es aquella en la que necesitamos una copia completa del objeto para que cuando clonemos o copiemos ese objeto, sea una copia independiente. Cuando se trata de tipos primitivos o integrados, no hay diferencia entre la copia superficial y la profunda.
P # 4) ¿Qué hace un Array Clone?
Responder: El método de clonación de matrices se utiliza para copiar los atributos de un objeto a otro. Utiliza una copia superficial para hacer esto.
P # 5) ¿Puede almacenar una matriz en una matriz?
Responder: Las matrices pueden contener matrices provistas de los elementos que son del mismo tipo (primitivo u objeto). Esto significa que no puede almacenar una matriz de enteros en una matriz de cadenas.
Conclusión
En este tutorial, exploramos la matriz de copia y la matriz de clonación en Java. Hemos visto varios métodos / enfoques para copiar y clonar una matriz.
Tenga en cuenta que la mayoría de estos métodos implementan una copia superficial. Para los tipos de datos primitivos, la copia superficial y profunda no difiere. Pero cuando una matriz contiene objetos o referencias, el programador necesita implementar una copia profunda según los requisitos.
En nuestros tutoriales posteriores, continuamos explorando más sobre las matrices de Java.
=> Lea la serie de formación Easy Java.
Lectura recomendada
- Tutorial de longitud de matriz de Java con ejemplos de código
- Matriz genérica de Java - ¿Cómo simular matrices genéricas en Java?
- Matriz de Java: ¿Cómo imprimir elementos de una matriz en Java?
- Matrices multidimensionales en Java (matrices 2d y 3d en Java)
- Cómo pasar / devolver una matriz en Java
- Cómo ordenar una matriz en Java - Tutorial con ejemplos
- Matriz de Java: declarar, crear e inicializar una matriz en Java
- Eliminar / eliminar un elemento de una matriz en Java