Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Java

Técnicas de Cópia de Arrays em Java: Guia Completo

Técnicas de Cópia de Arrays em Java

Aprenda como duplicar arrays unidimensionais e bidimensionais em Java usando operador de atribuição, loops, System.arraycopy, Arrays.copyOfRange e mais, com exemplos claros e dicas de boas práticas.


1. Cópia com Operador de Atribuição

Atribuir uma variável de array a outra é o método mais simples. Ele copia a referência, não os dados.

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

Saída:

1, 2, 3, 4, 5, 6

Ambos numbers e positiveNumbers agora apontam para o mesmo objeto array. Alterar um elemento afeta o outro:

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 + ", ");
        }
    }
}

Saída:

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

Esta é uma cópia rasa. Para evitar efeitos colaterais não intencionais, use uma técnica de cópia profunda.


2. Cópia Profunda com Loop

Iterar sobre cada elemento e atribuí-lo a um novo array cria uma cópia independente.

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));
    }
}

Saída:

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

Como source e destination são objetos distintos, modificações em um não afetam o outro.


3. Usando System.arraycopy()

O método System.arraycopy do Java oferece uma maneira rápida e integrada de copiar segmentos de array.

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

Exemplo:

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));
    }
}

Saída:

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

4. Cópia com Arrays.copyOfRange()

Quando você precisa de um novo array contendo uma fatia específica, Arrays.copyOfRange é 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));
    }
}

Saída:

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

5. Copiando Arrays 2D com Loop

Cópia profunda de um array bidimensional requer copiar cada linha 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));
    }
}

Saída:

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

6. Cópia de Array 2D com System.arraycopy()

Substitua o loop interno com arraycopy para código mais limpo.

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));
    }
}

Saída:

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

Java

  1. Dominando Arrays em C#: Declaração, Inicialização e Operações
  2. Dominando Operadores Java: Tipos, Sintaxe e Exemplos Práticos
  3. Comentários em Java: Tipos, Uso e Boas Práticas
  4. Dominando Interfaces em Java: Conceitos, Implementação e Boas Práticas
  5. Dominando Try-With-Resources em Java: Gerenciamento Automático de Recursos Explicado
  6. Anotações em Java Explicadas: Tipos, Posicionamento e Exemplos Práticos
  7. Arrays em C++ Desmistificados: Declaração, Inicialização e Técnicas com Ponteiros
  8. Dominando Alocação Dinâmica de Arrays em C++: Guia Prático com Exemplos de Código
  9. Tutorial de Arrays em Java: Declaração, Criação e Inicialização – Código de Exemplo
  10. Criando Array de Objetos em Java: Guia Passo a Passo