Java で配列をコピーするにはいくつかの方法があります:
(1) clone
# # (2) System.arraycopy
(3) Arrays.copyOf
(4) Arrays.copyOfRange
これらの使用法を以下に紹介します。 ##(1) clone メソッドは Object クラスから継承されており、基本データ型 (String、boolean、char、byte、short、float、double.long) は clone メソッドを使用して直接複製できます。型は値が不変であるため使用できます。
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) System.arraycopy メソッドはローカル メソッドであり、ソース コードで次のように定義されています。
/** * 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);使用例:
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]
このメソッドでは、新しい配列を自分で作成する必要があります (3) Arrays.copyOf の最下層では、実際には System.arraycopy も使用されます。ソース コードは次のとおりです:
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; }使用例:
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) Arrays.copyOfRange の最下層は実際には System.arraycopy を使用しますが、メソッド
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]
The をカプセル化します。最後に注意すべきことは、基本型のコピーは元の配列の値に影響を与えない場合、配列のコピー (レプリケーション) は浅いコピーであるため、参照型である場合は使用できません。
以上がJavaで配列をコピーする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。