in

Copia de matriz en Java – GeeksforGeeks

gfg 200x200 min

Dada una matriz, necesitamos copiar sus elementos en una matriz diferente.

Método 1 (simple pero incorrecto)

Podríamos tener la tentación de proceder así:

Java

int a[] = { 1, 8, 3 };

int b[] = new int[a.length];

b = a;

Sin embargo, ¡es incorrecto!

Cuando hacemos “b = a”, en realidad estamos asignando una referencia a la matriz. Por lo tanto, si hacemos algún cambio en una matriz, también se reflejará en otras matrices porque tanto a como b se refieren a la misma ubicación.

Java

public class Test {

    public static void main(String[] args)

    {

        int a[] = { 1, 8, 3 };

        

        int b[] = new int[a.length];

        

        

        b = a;

        

        

        B[0]++;

        System.out.println("Contents of a[] ");

        for (int i = 0; i < a.length; i++)

            System.out.print(a[i] + " ");

        System.out.println("nnContents of b[] ");

        for (int i = 0; i < b.length; i++)

            System.out.print(b[i] + " ");

    }

}

Producción
Contents of a[] 
2 8 3 

Contents of b[] 
2 8 3 

Método 2: (Fácil y correcto)

Podríamos iterar cada elemento de la matriz original dada y copiar un elemento a la vez. El uso de este método garantiza que cualquier modificación de b no alterará la matriz original a.

Java

public class Test {

    public static void main(String[] args)

    {

        int a[] = { 1, 8, 3 };

        

        int b[] = new int[a.length];

        

        for (int i = 0; i < a.length; i++)

            b[i] = a[i];

        

        

        B[0]++;

        System.out.println("Contents of a[] ");

        for (int i = 0; i < a.length; i++)

            System.out.print(a[i] + " ");

        System.out.println("nnContents of b[] ");

        for (int i = 0; i < b.length; i++)

            System.out.print(b[i] + " ");

    }

}

Producción
Contents of a[] 
1 8 3 

Contents of b[] 
2 8 3 

Método 3: (usando Clone ())

En el método anterior tuvimos que iterar sobre toda la matriz para hacer una copia, ¿podemos hacerlo mejor? ¡La respuesta es sí!
Podemos usar el método de clonación en Java.

Java

public class Test {

    public static void main(String[] args)

    {

        int a[] = { 1, 8, 3 };

        

        int b[] = a.clone();

        

        

        B[0]++;

        System.out.println("Contents of a[] ");

        for (int i = 0; i < a.length; i++)

            System.out.print(a[i] + " ");

        System.out.println("nnContents of b[] ");

        for (int i = 0; i < b.length; i++)

            System.out.print(b[i] + " ");

    }

}

Producción
Contents of a[] 
1 8 3 

Contents of b[] 
2 8 3 

Método 4: (usando System.arraycopy ())

También podemos usar System.arraycopy () Método. El sistema está presente en el paquete java.lang. Su firma es como:

public static void arraycopy(Object src, int srcPos, Object dest, 
                             int destPos, int length)

Dónde:

  1. src denota la matriz de origen.
  2. srcPos es el índice desde el que comienza la copia.
  3. dest denota la matriz de destino
  4. destPos es el índice desde el que se colocan los elementos copiados en la matriz de destino.
  5. largo es la longitud del subarreglo que se va a copiar.

El programa ilustra lo mismo:

Java

public class Test {

    public static void main(String[] args)

    {

        int a[] = { 1, 8, 3 };

        

        int b[] = new int[a.length];

        

        System.arraycopy(a, 0, b, 0, 3);

        

        

        B[0]++;

        System.out.println("Contents of a[] ");

        for (int i = 0; i < a.length; i++)

            System.out.print(a[i] + " ");

        System.out.println("nnContents of b[] ");

        for (int i = 0; i < b.length; i++)

            System.out.print(b[i] + " ");

    }

}

Producción
Contents of a[] 
1 8 3 

Contents of b[] 
2 8 3 

Método 5: (Usando Arrays.copyOf ())

Si desea copiar los primeros elementos de una matriz o una copia completa de la matriz, puede utilizar este método. Su sintaxis es la siguiente:

public static int[] copyOf​(int[] original, int newLength) 

Java

import java.util.Arrays;

class GFG {

    public static void main(String[] args)

    {

        int a[] = { 1, 8, 3 };

        

        

        int b[] = Arrays.copyOf(a, 3);

        

        

        B[0]++;

        System.out.println("Contents of a[] ");

        for (int i = 0; i < a.length; i++)

            System.out.print(a[i] + " ");

        System.out.println("nnContents of b[] ");

        for (int i = 0; i < b.length; i++)

            System.out.print(b[i] + " ");

    }

}

Producción
Contents of a[] 
1 8 3 

Contents of b[] 
2 8 3 

Método 6: (usando Arrays.copyOfRange ())

Este método copia el rango especificado de la matriz especificada en una nueva matriz.

public static int[] copyOfRange​(int[] original, int from, int to)

Dónde,

  1. original: esta es la matriz de la que se va a copiar un rango,
  2. from: este es el índice inicial del rango que se va a copiar,
  3. to – Este es el índice final del rango que se va a copiar, exclusivo.

Java

import java.util.Arrays;

class GFG {

    public static void main(String[] args)

    {

        int a[] = { 1, 8, 3, 5, 9, 10 };

        

        

        int b[] = Arrays.copyOfRange(a, 2, 6);

        

        

        System.out.println("Contents of a[] ");

        for (int i = 0; i < a.length; i++)

            System.out.print(a[i] + " ");

        System.out.println("nnContents of b[] ");

        for (int i = 0; i < b.length; i++)

            System.out.print(b[i] + " ");

    }

}

Producción
Contents of a[] 
1 8 3 5 9 10 

Contents of b[] 
3 5 9 10 

Resumen de los métodos anteriores:

  • Simplemente asignar una referencia es incorrecto
  • La matriz se puede copiar iterando sobre una matriz y asignando elementos uno por uno.
  • Podemos evitar la iteración sobre elementos usando clone () o System.arraycopy ()
  • clone () crea una nueva matriz del mismo tamaño, pero System.arraycopy () se puede usar para copiar desde un rango de origen a un rango de destino.
  • System.arraycopy () es más rápido que clone () ya que utiliza la interfaz nativa de Java (Fuente: Desbordamiento de pila)
  • Si desea copiar los primeros elementos de una matriz o una copia completa de una matriz, puede usar el método Arrays.copyOf ().
  • Arrays.copyOfRange () se usa para copiar un rango específico de una matriz. Si el índice inicial no es 0, puede usar este método para copiar una matriz parcial.

Este artículo es una contribución de Ashutosh Kumar. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema discutido anteriormente.

¡Atención lector! No dejes de aprender ahora. Hazte con todo lo importante Fundación Java y conceptos de colecciones con el Curso de Fundamentos de Java y Colecciones de Java a un precio asequible para los estudiantes y prepárese para la industria. Para completar su preparación desde el aprendizaje de un idioma hasta DS Algo y muchos más, consulte Curso completo de preparación para entrevistas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

apple touch icon@2

Compruebe si una variable es una cadena en JavaScript

Brass statue

Latón vs Bronce – Diferencia y Comparación