Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Técnicas de Copia de Arrays en Java: Guía Completa

Técnicas de Copia de Arrays en Java

Aprende a duplicar arrays unidimensionales y bidimensionales en Java usando asignación, bucles, System.arraycopy, Arrays.copyOfRange y más, con ejemplos claros y consejos de mejores prácticas.


1. Copia con el Operador de Asignación

Asignar una variable de array a otra es el método más simple. Copia la referencia, no los datos.

class Main {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5, 6};
        int[] positiveNumbers = numbers; // copia de referencia
        for (int number : positiveNumbers) {
            System.out.print(number + ", ");
        }
    }
}

Salida:

1, 2, 3, 4, 5, 6

Tanto numbers como positiveNumbers ahora apuntan al mismo objeto array. Cambiar un elemento afecta al otro:

class Main {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5, 6};
        int[] positiveNumbers = numbers;
        numbers[0] = -1;
        for (int number : positiveNumbers) {
            System.out.print(number + ", ");
        }
    }
}

Salida:

-1, 2, 3, 4, 5, 6

Esta es una copia superficial (shallow copy). Para evitar efectos secundarios no intencionados, usa una técnica de copia profunda.


2. Copia Profunda con un Bucle

Iterar sobre cada elemento y asignarlo a un nuevo array crea una copia independiente.

import java.util.Arrays;

class Main {
    public static void main(String[] args) {
        int[] source = {1, 2, 3, 4, 5, 6};
        int[] destination = new int[source.length];
        for (int i = 0; i < source.length; ++i) {
            destination[i] = source[i];
        }
        System.out.println(Arrays.toString(destination));
    }
}

Salida:

[1, 2, 3, 4, 5, 6]

Como source y destination son objetos distintos, las modificaciones a uno no afectan al otro.


3. Usando System.arraycopy()

El método System.arraycopy de Java ofrece una forma rápida e integrada de copiar segmentos de array.

arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

Ejemplo:

import java.util.Arrays;

class Main {
    public static void main(String[] args) {
        int[] n1 = {2, 3, 12, 4, 12, -2};
        int[] n2 = new int[n1.length];
        System.arraycopy(n1, 0, n2, 0, n1.length);
        System.out.println("n2 = " + Arrays.toString(n2));
        int[] n3 = new int[5];
        System.arraycopy(n1, 2, n3, 1, 2);
        System.out.println("n3 = " + Arrays.toString(n3));
    }
}

Salida:

n2 = [2, 3, 12, 4, 12, -2]
n3 = [0, 12, 4, 0, 0]

4. Copia con Arrays.copyOfRange()

Cuando necesitas un nuevo array que contenga un segmento específico, Arrays.copyOfRange es ideal.

import java.util.Arrays;

class ArraysCopy {
    public static void main(String[] args) {
        int[] source = {2, 3, 12, 4, 12, -2};
        int[] destination1 = Arrays.copyOfRange(source, 0, source.length);
        System.out.println("destination1 = " + Arrays.toString(destination1));
        int[] destination2 = Arrays.copyOfRange(source, 2, 5);
        System.out.println("destination2 = " + Arrays.toString(destination2));
    }
}

Salida:

destination1 = [2, 3, 12, 4, 12, -2]
destination2 = [12, 4, 12]

5. Copia de Arrays 2D con un Bucle

La copia profunda de un array bidimensional requiere copiar cada fila individualmente.

import java.util.Arrays;

class Main {
    public static void main(String[] args) {
        int[][] source = {
            {1, 2, 3, 4},
            {5, 6},
            {0, 2, 42, -4, 5}
        };
        int[][] destination = new int[source.length][];
        for (int i = 0; i < destination.length; ++i) {
            destination[i] = new int[source[i].length];
            for (int j = 0; j < destination[i].length; ++j) {
                destination[i][j] = source[i][j];
            }
        }
        System.out.println(Arrays.deepToString(destination));
    }
}

Salida:

[[1, 2, 3, 4], [5, 6], [0, 2, 42, -4, 5]]

6. Copia de Array 2D con System.arraycopy()

Reemplaza el bucle interno con arraycopy para código más limpio.

import java.util.Arrays;

class Main {
    public static void main(String[] args) {
        int[][] source = {
            {1, 2, 3, 4},
            {5, 6},
            {0, 2, 42, -4, 5}
        };
        int[][] destination = new int[source.length][];
        for (int i = 0; i < source.length; ++i) {
            destination[i] = new int[source[i].length];
            System.arraycopy(source[i], 0, destination[i], 0, destination[i].length);
        }
        System.out.println(Arrays.deepToString(destination));
    }
}

Salida:

[[1, 2, 3, 4], [5, 6], [0, 2, 42, -4, 5]]

Java

  1. Dominando arrays en C#: Declaración, inicialización y operaciones
  2. Arrays en C++: Declaración, inicialización y técnicas con punteros
  3. Asignación dinámica de arrays en C++: Guía práctica con ejemplos de código
  4. Dominar Operadores en Java: Tipos, Sintaxis y Ejemplos Prácticos
  5. Comentarios en Java: Tipos, Uso y Mejores Prácticas
  6. Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
  7. Dominando Try‑with‑Resources en Java: Gestión automática de recursos explicada
  8. Anotaciones en Java explicadas: Tipos, ubicación y ejemplos prácticos
  9. Tutorial de arrays en Java: Declaración, creación e inicialización – Código de ejemplo
  10. Crear un array de objetos en Java: Guía paso a paso
  11. Domine Bubble Sort en Java: Ejemplo Claro y Recorrido Paso a Paso