Quelle est la méthode la plus efficace pour copier un tableau?
sobes.tech IA
Réponse de l'IA
Pour les types de données primitifs et les objets sans copie profonde, les méthodes les plus efficaces sont :
-
System.arraycopy(): Méthode native optimisée pour des copies rapides.// Exemple d'utilisation 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éthode pratique de la classeArrays. Utilise en interneSystem.arraycopy().// Exemple d'utilisation de Arrays.copyOf int[] sourceArray = {1, 2, 3, 4, 5}; int[] destinationArray = Arrays.copyOf(sourceArray, sourceArray.length);
Pour la copie profonde d'objets (lorsqu'il faut copier non seulement les références, mais aussi les objets pointés), d'autres approches peuvent être nécessaires, telles que :
-
Implémentation de l'interface
Cloneableet redéfinition de la méthodeclone(). Non recommandé pour les nouveaux développements en raison de nombreux problèmes.// Exemple d'implémentation de Cloneable et clone() class MyObject implements Cloneable { int value; MyObject innerObject; @Override protected Object clone() throws CloneNotSupportedException { MyObject cloned = (MyObject) super.clone(); // copie profonde de l'objet interne cloned.innerObject = (MyObject) this.innerObject.clone(); return cloned; } } -
Utilisation d'un constructeur de copie.
// Exemple de constructeur de copie class MyObject { int value; MyObject innerObject; public MyObject(MyObject other) { this.value = other.value; // copie profonde de l'objet interne this.innerObject = new MyObject(other.innerObject); } } -
Utilisation de la sérialisation/désérialisation (par exemple, avec
ByteArrayInputStreametObjectInputStream). Peut être inefficace pour de grands tableaux ou des objets ne mettant pas en œuvreSerializable. -
Utilisation de bibliothèques tierces (par exemple, Apache Commons Lang avec la méthode
SerializationUtils.clone()).
Le plus efficace pour une copie superficielle (niveau plat) des types primitifs et des objets simples est System.arraycopy() ou Arrays.copyOf(). Pour la copie profonde, la méthode préférée est souvent le constructeur de copie.