Maison >Java >javaDidacticiel >Comment copier un tableau en Java
Il existe plusieurs façons de copier un tableau en Java :
(1) cloner
(2) System.arraycopy
(3) Arrays.copyOf
(4) Arrays.copyOfRange
Ce qui suit présente leur utilisation :
(1) La méthode clone est héritée de la classe Object. Les types de données de base (String, boolean, char, byte, short, float, double.long) peuvent être clonés directement à l'aide de la méthode clone. Les types peuvent être utilisés car leurs valeurs sont immuables.
int a1[]={1,3}; int a2[]=a1.clone(); a1[0]=666; System.out.println(Arrays.toString(a1));//[666,3] System.out.println(Arrays.toString(a2));//[1,3]
2) La méthode System.arraycopy est une méthode locale, définie comme suit dans le code source :
/** * System.arraycopy(src,srcPos,dest,destPos,length); * src :源数组 srcPos:源数组要复制的起始位置; * dest:目的数组 destPos:目的数组放置的起始位置; * length:复制的长度. */ public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
Exemple d'utilisation :
int a1[]={1,2,3,4,5}; int a2[]=new int[10]; System.arraycopy(a1,1,a2,3,3); System.out.println(Arrays.toString(a1));//[1, 2, 3, 4, 5] System.out.println(Arrays.toString(a2));//[0, 0, 0, 2, 3, 4, 0, 0, 0, 0]
Remarque : Cette méthode nous oblige à créer nous-mêmes un nouveau tableau
(3) La couche inférieure de Arrays.copyOf utilise en fait également System.arraycopy. Le code source est le suivant :
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) { @SuppressWarnings("unchecked") T[] copy = ((Object)newType == (Object)Object[].class) ? (T[]) new Object[newLength] : (T[]) Array.newInstance(newType.getComponentType(), newLength); System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; }
Exemple d'utilisation :
int a1[]={1,2,3,4,5}; int a2[]=Arrays.copyOf(a1,3);//(原数组,拷贝的个数) System.out.println(Arrays.toString(a1));//[1, 2, 3, 4, 5] System.out.println(Arrays.toString(a2));//[1, 2, 3] //这个方法不需要我们new新的数组
(4) La couche inférieure de Arrays.copyOfRange utilise en fait System.arraycopy, mais elle encapsule une méthode
int a1[]={1,2,3,4,5}; int a2[]=Arrays.copyOfRange(a1,0,1);//(原数组,开始位置,拷贝的个数) System.out.println(Arrays.toString(a1));//[1, 2, 3, 4, 5] System.out.println(Arrays.toString(a2));//[1]
Enfin , il convient de noter que la copie du type de base est si elle n'affecte pas la valeur du tableau d'origine, elle ne peut pas être utilisée s'il s'agit d'un type référence, car la copie (réplication) du tableau est une copie superficielle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!