このシリーズでは、Java の配列から始めます。配列は、同じタイプのデータを格納するためのデータ構造であり、インデックスを使用して配列の要素にアクセスします。
- 配列の定義
- 配列の本質
- 配列のコピー
配列の定義#
配列の定義には主に 2 つの方法があります。1 つは配列のサイズを指定し、配列要素のインデックスに基づいて値を割り当てる方法です。もう 1 つは配列を直接作成し、値を割り当てる方法です。具体的には次のようになります:
//1.サイズが10の配列を定義
int[] arrayA = new int[10];
int arrayB[] = new int[10];
arrayA[0] = 1;
arrayB[1] = 2;
//2.配列を定義し、値を割り当てる
int[] arrayC = {1,2,3,4,5};
配列の本質#
Java の配列は実際にはクラスですので、2 つの配列変数は同じ配列を指すことができます。以下のコードを観察してください:
int[] arrayD = {1,1,1};
int[] arrayE = arrayD;
arrayD[0] = 2;
System.out.println(arrayE[0]);
明らかに、上記のコードを実行すると結果は必ず 2 になります。上記のコードでは、配列 arrayD の値を arrayE に指定しています。これは、2 つの配列 arrayD、arrayE が実際には同じ配列空間を指していることを意味します。したがって、arrayD の要素の値を変更すると、arrayE の対応する要素の値も変更されます。具体的な例は以下の図に示されています:
注意:配列がメソッドのパラメータとして渡される場合、配列の参照が渡されることになります。したがって、メソッド内で配列を操作すると、元の配列にも影響が及びます。これは非常に重要なポイントです。
配列のコピー#
2 つの配列の要素の値がすべて同じになるようにするために、Java が提供する arraycopy () を使用することができます。具体的には次のようになります:
int[] arrayD = {1,1,1};
int[] arrayF = new int[3];
//配列のコピー
System.arraycopy(arrayD, 0, arrayF, 0, 3);
System.out.println(Arrays.toString(arrayF));
明らかに、上記のコードを実行すると、配列 arrayF の値は 1、1、1 になります。配列 arrayD の要素の値を間接的に変更すると、配列 arrayF の値は 2、1、1 になります。これは、文脈から得られる結果です。
以下では、arraycopy メソッドのパラメータの意味について説明します。具体的には次のようになります:
/**
* 配列のコピー
* @param src:元の配列
* @param srcPos:コピーを開始する元の配列の位置
* @param dest:目的の配列
* @param destPos:目的の配列の開始位置
* @param length:目的の配列の長さ
*/
public static void arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length) {
}
配列に注意する必要があることはこれくらいです。もちろん、配列操作に関する他の API もありますが、配列間の値の割り当てによって元の配列の値が影響を受けることについては、以前気づかなかったので、今日はこれくらいにします。