Qual é a forma mais eficiente de copiar um array?
sobes.tech IA
Resposta da IA
Para tipos de dados primitivos e objetos sem cópia profunda, os métodos mais eficientes são:
-
System.arraycopy(): Método nativo otimizado para cópias rápidas.// Exemplo de uso de System.arraycopy int[] sourceArray = {1, 2, 3, 4, 5}; int[] destinationArray = new int[sourceArray.length]; System.arraycopy(sourceArray, 0, destinationArray, 0, sourceArray.length); -
Arrays.copyOf(): Método conveniente da classeArrays. Internamente usaSystem.arraycopy().// Exemplo de uso de Arrays.copyOf int[] sourceArray = {1, 2, 3, 4, 5}; int[] destinationArray = Arrays.copyOf(sourceArray, sourceArray.length);
Para cópia profunda de objetos (quando é necessário copiar não apenas as referências, mas também os objetos aos quais elas apontam), podem ser necessárias outras abordagens, como:
-
Implementação da interface
Cloneablee sobrescrita do métodoclone(). Não recomendado para novos desenvolvimentos devido a vários problemas.// Exemplo de implementação de Cloneable e clone() class MyObject implements Cloneable { int value; MyObject innerObject; @Override protected Object clone() throws CloneNotSupportedException { MyObject cloned = (MyObject) super.clone(); // cópia profunda do objeto interno cloned.innerObject = (MyObject) this.innerObject.clone(); return cloned; } } -
Uso de construtor de cópia.
// Exemplo de construtor de cópia class MyObject { int value; MyObject innerObject; public MyObject(MyObject other) { this.value = other.value; // cópia profunda do objeto interno this.innerObject = new MyObject(other.innerObject); } } -
Uso de serialização/deserialização (por exemplo, com
ByteArrayInputStreameObjectInputStream). Pode ser ineficiente para grandes arrays ou objetos que não implementamSerializable. -
Uso de bibliotecas externas (por exemplo, Apache Commons Lang com o método
SerializationUtils.clone()).
O método mais eficiente para cópia superficial (nível plano) de tipos primitivos e objetos simples é System.arraycopy() ou Arrays.copyOf(). Para cópia profunda, muitas vezes a abordagem preferida é o construtor de cópia.