java copy array how copy clone an array java
Este tutorial sobre cópia e clonagem de matrizes discute os vários métodos para copiar uma matriz em Java:
Aqui, discutiremos a operação de cópia de arrays Java. Java oferece várias maneiras de fazer cópias de elementos de array. Como sabemos, em Java, os arrays podem conter elementos de tipos primitivos ou objetos ou referências.
Ao fazer cópias de tipos primitivos, a tarefa é bastante fácil, mas quando se trata de objetos ou referências, você precisa prestar atenção se a cópia é profunda ou superficial.
=> Dê uma olhada no guia para iniciantes em Java aqui.
A cópia superficial faz uma cópia do elemento. Não é um problema quando tipos de dados primitivos estão envolvidos. Mas quando as referências estão envolvidas, uma cópia superficial apenas copiará o valor e não as informações subjacentes.
Assim, mesmo que você tenha feito cópias de elementos, uma alteração em uma cópia refletirá na outra cópia também, pois os locais de memória são compartilhados. Para evitar isso, você precisa fazer uma cópia profunda na qual os locais da memória não sejam compartilhados.
O que você aprenderá:
Copiar e clonar matrizes Java
Java permite que você copie matrizes usando o método de cópia direta fornecido por java.util ou a classe System. Ele também fornece um método de clonagem que é usado para clonar uma matriz inteira.
Neste tutorial, discutiremos os seguintes métodos de cópia e clonagem de matrizes.
- Cópia manual usando for loop
- Usando System.arraycopy ()
- Usando Arrays.copyOf ()
- Usando Arrays.copyOfRange ()
- Usando Object.clone ()
Vamos explorar!!
Cópia manual usando For Loop
Normalmente, quando copiamos variáveis, por exemplo, a e b, realizamos a operação de cópia da seguinte forma:
a = b;
Isso não funcionará corretamente se aplicarmos o mesmo método aos arrays.
Vamos ver um exemplo de programação.
public class Main { public static void main(String() args) { int intArray() = {12,15,17}; //print original intArray System.out.println('Contents of intArray() before assignment:'); for (int i=0; i Resultado:

No programa acima, existem duas matrizes, ou seja, intArray e copyArray. A tarefa é copiar o conteúdo de intArray para copyArray. Para fazer isso, a instrução copyArray = intArray é introduzida. O que é feito aqui é que as referências da matriz são atribuídas. Portanto, esta não é uma cópia real.
Como resultado da declaração acima, a localização da memória do intArray também é compartilhada pelo copyArray. Agora, quando o elemento copyArray é incrementado, essa mudança também é refletida no intArray. Isso é mostrado na saída.
Para superar esse problema, empregamos um método de copiar o array usando o loop for. Aqui, cada elemento do array original é copiado para o novo array usando um loop for.
Este programa é mostrado abaixo.
public class Main { public static void main(String() args) { int intArray() = {12,15, 17}; // define an array copyArray to copy contents of intArray int copyArray() = new int(intArray.length); // copy contents of intArray to copyArray for (int i=0; i Resultado:

Aqui, modificamos o programa anterior para incluir o loop for e dentro do loop for, atribuímos cada elemento de intArray ao elemento correspondente de copyArray. Dessa forma, os elementos são realmente copiados. Portanto, quando um array é modificado, as alterações não se refletem em outro array.
Usando System.arraycopy ()
A classe System do Java tem um método chamado “ArrayCOpy” que permite copiar elementos de um array para outro array.
O protótipo geral deste método é o seguinte:
public static void arraycopy( Object src_array, int src_Pos,Object dest_array, int dest_Pos, int length )
Aqui,
- src_array => Matriz de origem de onde o conteúdo deve ser copiado.
- src_Pos => A posição na matriz de origem de onde a cópia começará.
- dest_array => Matriz de destino para a qual os elementos devem ser copiados.
- dest_Pos => Posição inicial na matriz de destino para os elementos a serem copiados.
- comprimento => Comprimento do array a ser copiado.
Vamos entender esse método com um exemplo.
class Main { public static void main(String() args) { //declaring a source array char() src_array = { 'S','o','f','t','w','a','r','e','T','e','s','t','i','n','g','H','e','l','p'}; char() dest_array = new char(19); System.arraycopy(src_array, 0, dest_array, 0,19); System.out.println('Source array:' + String.valueOf(src_array)); System.out.println('Destination array after arraycopy:'+ String.valueOf(dest_array)); } }
Resultado:

No programa acima, usamos o método ‘arraycopy’ para copiar um array para outro array. Você pode ver a chamada ao método arraycopy. Copiamos a matriz de origem desde o início (0ºlocalização) e copie todo o array.
Por último, exibimos o equivalente em string das matrizes de origem e de destino.
Com o método arraycopy, você pode copiar até mesmo matrizes parciais, uma vez que toma as posições inicial e final do elemento como argumentos. Este método faz uma cópia superficial dos elementos do array.
Usando Arrays.copyOf ()
O método Arrays.copyOf () usa internamente o método System.arraycopy (). Embora não seja tão eficiente quanto arraycopy, ele pode ser usado para copiar um array completo ou parcial, assim como o método arraycopy.
O método ‘copyOf ()’ é uma parte do pacote java.util e pertence à classe “Arrays”.
O protótipo deste método é o seguinte:
public static int() copyOf(int() original_array,int newLength)
Onde,
- original: A matriz a ser copiada para a nova matriz.
- newLength: O comprimento da matriz copiada a ser retornada.
Portanto, esse método faz uma cópia da matriz fornecida no primeiro argumento para o comprimento especificado, truncando ou preenchendo o comprimento com 0 para a nova matriz. Isso significa que se o comprimento da matriz copiada for maior do que a matriz original, os 0s são substituídos pelos elementos restantes.
O programa abaixo mostra um exemplo do método copyOf.
importjava.util.Arrays; public class Main { public static void main(String args()) { // define original array int() even_Array = new int() {2,4,6,8}; System.out.println('Original Array:' + Arrays.toString(even_Array)); // copying array even_Array to copy_Array int() copy_Array = Arrays.copyOf(even_Array,5); System.out.println('Copied Array:' + Arrays.toString(copy_Array)); // assign value to unassigned element of copied array copy_Array(4) = 10; System.out.println('Copied and modified Array:' + Arrays.toString(copy_Array)); } }
Resultado:

No programa acima, copiamos o even_Array de comprimento 4 usando o método copyOf. O segundo argumento fornecido é 5. Portanto, a nova matriz copiada possui 5 elementos. Os primeiros quatro são iguais ao array original e o quinto elemento é 0, pois copyOf o preenche porque o comprimento do array original é menor do que o do novo array.
Usando Arrays.copyOfRange ()
O método Arrays.copyOfRange () é usado especificamente quando você deseja copiar arrays parciais. Como o método copyOf (), este método também usa internamente o método System.arraycopy ().
O protótipo do método Arrays.copyOfRange () é o seguinte:
public static short() copyOfRange(short() original, int from, int to)
Onde,
- original: A matriz da qual um intervalo deve ser copiado.
- a partir de: Índice inicial do intervalo a ser copiado, inclusive.
- para: O índice final do intervalo a ser copiado, exclusivo.
Um exemplo de implementação do método copyOfRange é mostrado abaixo.
import java.util.Arrays; class Main { public static void main(String args()) { int intArray() = { 10,20,30,40,50 }; // to index is within the range int() copyArray = Arrays.copyOfRange(intArray, 2, 6); System.out.println('Array copy with both index within the range: ' + Arrays.toString(copyArray)); //to index is out of range int() copy1 = Arrays.copyOfRange(intArray, 4, intArray.length + 3); System.out.println('Array copy with to index out of range: ' + Arrays.toString(copy1)); } }
Resultado:

Usando Object.clone ()
O array Java implementa internamente uma interface clonável e, portanto, é fácil clonar um array Java. Você pode clonar arrays unidimensionais ou bidimensionais. Quando você clona um array unidimensional, ele faz uma cópia profunda dos elementos do array que copia os valores.
Por outro lado, quando você clona matrizes bidimensionais ou multidimensionais, uma cópia superficial dos elementos é feita, ou seja, apenas referências são copiadas. Esta clonagem de matrizes é feita pelo método 'Clone ()' fornecido pelas matrizes.
Uma cópia profunda de matrizes 1-D como resultado da clonagem pode ser representada como abaixo:

Agora vamos implementar a clonagem de array 1-D em um programa Java.
class Main { public static void main(String args()) { int num_Array() = {5,10,15,20,25,30}; int clone_Array() = num_Array.clone(); System.out.println('Original num_Array:'); for (int i = 0; i Como você pode ver na saída, a expressão para verificar a igualdade de ambos os arrays retorna false. Isso ocorre porque a clonagem de uma matriz unidimensional resulta em uma cópia profunda em que os valores são copiados para uma nova matriz e não apenas referências.
perguntas frequentes
Q # 1) Como fazer uma cópia de um array em Java?
Responda: Existem diferentes métodos para copiar uma matriz.
- Você pode usar um loop for e copiar elementos de um para outro, um por um.
- Use o método clone para clonar uma matriz.
- Use o método arraycopy () da classe System.
- Use os métodos copyOf () ou copyOfRange () da classe Arrays.
Q # 2) Como você atribui um array a outro?
Responda: Você pode atribuir a matriz a outra usando um operador de atribuição simples (=). Você deve garantir que os dois arrays sejam do mesmo tipo de dados e tenham uma dimensão idêntica.
P # 3) O que é uma cópia superficial e uma cópia profunda?
Responda: Na cópia superficial, apenas os atributos de objetos ou matrizes em questão são copiados. Portanto, qualquer alteração na matriz copiada será refletida no original. A clonagem de Java é um exemplo de cópia superficial.
melhores programas espiões para telefones celulares
Uma cópia profunda é aquela em que precisamos de uma cópia completa do objeto para que, quando clonarmos ou copiarmos esse objeto, ele seja uma cópia independente. Quando tipos primitivos ou integrados estão envolvidos, não há diferença entre a cópia superficial e profunda.
P # 4) O que um Clone de Array faz?
Responda: O método de clonagem de arrays é usado para copiar os atributos de um objeto para outro. Ele usa uma cópia superficial para fazer isso.
Q # 5) Você pode armazenar um Array em um Array?
Responda: Os arrays podem conter os arrays fornecidos com os elementos que são do mesmo tipo (primitivos ou objeto). Isso significa que você não pode armazenar uma matriz de inteiros em uma matriz de string.
Conclusão
Neste tutorial, exploramos array de cópia e arrays de clone em Java. Vimos vários métodos / abordagens para copiar e clonar um array.
Observe que a maioria desses métodos implementa uma cópia superficial. Para tipos de dados primitivos, cópia superficial e profunda não diferem. Mas quando um array contém objetos ou referências, o programador precisa implementar uma cópia profunda de acordo com os requisitos.
Em nossos tutoriais subsequentes, continuamos a explorar mais sobre os arrays Java.
=> Leia a série de treinamento Easy Java.
Leitura recomendada
- Tutorial de comprimento de array Java com exemplos de código
- Array genérico de Java - como simular matrizes genéricas em Java?
- Array Java - como imprimir elementos de um array em Java?
- Arrays multidimensionais em Java (arrays 2d e 3d em Java)
- Como Passar / Retornar um Array em Java
- Como classificar uma matriz em Java - Tutorial com exemplos
- Array Java - declarar, criar e inicializar um array em Java
- Remover / excluir um elemento de um array em Java