Java Array copyOf()
O método Arrays.copyOf()
em Java é uma função utilitária fornecida pela classe java.util.Arrays
. É usado para criar uma nova matriz, copiando o intervalo de elementos especificado de uma matriz existente. Esse método é útil para redimensionar matrizes, copiar matrizes parciais e criar backups de matrizes.
Uso
Arrays.copyOf()
é comumente usado quando você precisa duplicar uma matriz com um tamanho diferente ou quando deseja copiar apenas uma parte de uma matriz. Ele retorna um novo array contendo os elementos copiados, e o array original permanece inalterado.
Sintaxe
public static <T> T[] copyOf(T[] original, int newLength)
original
: A matriz da qual os elementos devem ser copiados.newLength
: O comprimento da nova matriz. Se for maior que o comprimento da matriz original, a nova matriz será preenchida com valores padrão.
Exemplos
Exemplo 1: Cópia de uma matriz inteira
import java.util.Arrays;
public class CopyOfExample {
public static void main(String[] args) {
int[] originalArray = {1, 2, 3, 4, 5};
int[] copiedArray = Arrays.copyOf(originalArray, originalArray.length);
System.out.println("Original Array: " + Arrays.toString(originalArray));
System.out.println("Copied Array: " + Arrays.toString(copiedArray));
}
}
Neste exemplo, Arrays.copyOf()
é usado para criar uma cópia exata de originalArray
. A nova matriz copiedArray
contém todos os elementos da matriz original.
Exemplo 2: Copiando com um tamanho maior
import java.util.Arrays;
public class CopyOfLargerExample {
public static void main(String[] args) {
int[] originalArray = {1, 2, 3};
int[] extendedArray = Arrays.copyOf(originalArray, 5);
System.out.println("Extended Array: " + Arrays.toString(extendedArray));
}
}
Aqui, Arrays.copyOf()
é usado para criar uma nova matriz extendedArray
com um comprimento de 5. Os elementos adicionais são inicializados com o valor padrão de 0
para o tipo int
.
Exemplo 3: Copiando com um tamanho menor
import java.util.Arrays;
public class CopyOfSmallerExample {
public static void main(String[] args) {
String[] originalArray = {"Java", "Python", "C++", "JavaScript"};
String[] truncatedArray = Arrays.copyOf(originalArray, 2);
System.out.println("Truncated Array: " + Arrays.toString(truncatedArray));
}
}
Neste exemplo, Arrays.copyOf()
cria uma nova matriz truncatedArray
com apenas os dois primeiros elementos de originalArray
.
Dicas e práticas recomendadas
- Original imutável: A matriz original não é modificada por
Arrays.copyOf()
, garantindo a integridade dos dados. - Valores padrão: Quando o novo comprimento da matriz for maior que o original, os novos elementos serão definidos como valores padrão (
0
,null
,false
, etc.). - Tipos de matriz:
Arrays.copyOf()
funciona com todos os tipos primitivos e de objetos, o que o torna versátil para vários tipos de dados. - Desempenho: Tenha cuidado com o desempenho ao copiar matrizes grandes, pois isso envolve a criação de uma nova matriz e a cópia de elementos.
Entendendo a cópia superficial e profunda
Arrays.copyOf()
produz uma cópia superficial, em que as referências aos elementos originais são copiadas, e não os próprios objetos. É importante lembrar disso ao lidar com estruturas de dados complexas, como matrizes 2D ou matrizes de objetos, em que as alterações nos objetos da matriz original podem se refletir na matriz copiada.
Exceções
NegativeArraySizeException
: Lançado se o parâmetronewLength
for negativo.NullPointerException
: Será lançado se a matrizoriginal
fornull
.