Java 配列の仕組みと使い方のサンプル

Javaの配列の仕組みと使い方のサンプルです。

目次

仕組み 配列とは
作成する 配列の宣言と同時に値を設定する(初期化)
  配列の要素の数を宣言して作成する
取得する 配列の値をfor文で取得する
  配列の要素に指定の値があるか確認する
  配列の最後の要素をlengthで取得する
変更 配列の値を変更する
ソート 配列の値をソートする
コピー 配列をコピーする
変換 配列をリストに変換する
  リストを配列に変換する
使用する メソッドの引数と戻り値が配列
2次元 2次元配列を作成する

配列とは

データ型[] a = { 値1 , 値2 , 値3 };

上記は複数の値を変数aに代入しています。
この変数aは配列として複数の値を持ちます。

  • 1つの変数で同じ型の複数の値を保持できます。
  • 各項目を要素(element)といいます。
  • 要素の順序をインデックス(添字)で管理します。上記図では[0]、[1]、[2]、[3]がインデックスです。
  • インデックスの先頭は0から始まります。
  • 最初に配列の数を決める必要があります。後から配列の数を変更できません。
  • 後から配列の数を変更する場合はコレクションのArrayListを使用します。
    Java ArrayListとListの使い方のサンプル

配列の宣言と同時に値を設定する(初期化)

package test1;

public class Test1 {
	public static void main(String[] args) {
		
		String[] a = {"赤","黄","青"};
		System.out.println(a[0]);//赤
		System.out.println(a[1]);//黄
		System.out.println(a[2]);//青
		
		int[] b = {1,2,3};
		System.out.println(b[0]);//1
		System.out.println(b[1]);//2
		System.out.println(b[2]);//3
		
		Integer[] c = {4,5,6};
		System.out.println(c[0]);//4
		System.out.println(c[1]);//5
		System.out.println(c[2]);//6
	}
}

6行目は、String型の配列を作成しています。
11行目は、int型の配列を作成しています。
16行目は、Integer型の配列を作成しています。

配列の要素の数を宣言して作成する

package test1;

public class Test1 {
	public static void main(String[] args) {
		
		String[] color1 = new String[3];
		color1[0] = "赤";
		color1[1] = "黄";
		color1[2] = "青";
		//color1[3] = "黒"; ArrayIndexOutOfBoundsExceptionが発生
		System.out.println(color1[0]);//赤
		System.out.println(color1[1]);//黄
		System.out.println(color1[2]);//青
	}
}

6行目は、配列の要素数の3を指定しています。
7~9行目は、配列に値を設定しています。
10行目のように4つめの値を追加しようとするとArrayIndexOutOfBoundsのエラーが発生します。

配列の値をfor文で取得する

package test1;

public class Test1 {
	public static void main(String[] args) {

		String[] color = {"赤","黄","青"};

		for (String a : color) {
			System.out.println(a); //赤 黄 青
		}

		for (int i = 0; i < color.length; i++) {
			System.out.println(color[i]); //赤 黄 青
		}
	}
}

8~10行目は、拡張for文で配列の各値を表示しています。
12~14行目は、for文で配列の各値を表示しています。

配列の要素に指定の値があるか確認する

package test1;

public class Test1 {
	public static void main(String[] args) {

		String[] color = {"赤","黄","青"};
		boolean b1 = false;
		
		for (String c : color) {
			if(c.equals("黄")) {
				b1 = true;
				break;
			}
		}
		System.out.println(b1); // true
	}
}

9行目のようにfor文でループさせて配列の要素を一つずつ確認していきます。

配列の値をソートする

package test1;
import java.util.Arrays;

public class Test1 {
    public static void main(String[] args) {
    	// 配列 数値
    	int[] a = {100,2,99};
    	Arrays.sort(a);
		for (int b : a) {
			System.out.println(b); // 2 99 100
		}
		
    	// 配列 文字列
    	String [] c = {"da","abb","pccc"};
    	Arrays.sort(c);
		for (String d : c) {
			System.out.println(d); // abb da pccc
		}
    }
}

7行目は、数値の配列です。
8行目でソートをしています。
10行目は、2,99,100になります。100,2,99にはなりません。
14行目は、文字列の配列です。
15行目でソートをしています。
17行目は、先頭の文字のabc順に表示されます。

配列の最後の要素をlengthで取得する

package test1;

public class Test1 {
	public static void main(String[] args) {

		String[] color = {"赤","黄","青"};
		
		System.out.println(color[color.length-1]); // 青
	}
}

lengthプロパティで配列の要素数を取得できます。
そこから1引いてインデックスとして指定します。

配列の値を変更する

package test1;

public class Test1 {
    public static void main(String[] args) {
        // 配列
		String[] a = {"赤","黄","青"};
		
		a[1] = "オレンジ";
		
		System.out.println(a[0]); //赤
		System.out.println(a[1]); //オレンジ
		System.out.println(a[2]); //青
    }
}

8行目は、文字列を配列の変数に代入しています。
インデックス(添字)で変更したい要素を指定します。

配列の値をコピーする

public static void arraycopy(コピー元配列,開始位置,コピー先配列,開始位置,コピーする要素数)
package test1;
import java.util.Arrays;

public class Test1 {
    public static void main(String[] args) {
        // 配列
        String[] a = {"赤","黄","青"};
        String[] b =  new String[3];
        
        System.arraycopy(a,0,b,0,a.length);
        
        b[1] = "オレンジ";
        System.out.println(Arrays.toString(a)); //赤 黄 青
        System.out.println(Arrays.toString(b)); //赤 オレンジ 青
    }
}

7行目はコピー元の配列で、8行目はコピー先の配列です。
10行目は、Systemクラスのarraycopyメソッドで配列をコピーしています。
12行目は、コピー先の配列の値を変更ています。
13,14行目は、コピー先の値は変わりましたが、コピー元の値は変更されていません。

配列をリストに変換する

package test1;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Test1 {
    public static void main(String[] args) {

    	String[] color = {"赤","黄","青"}; // 配列
    	List<String> list1 = new ArrayList<>(); // リスト

        Collections.addAll(list1, color);
        
        System.out.println(list1); // [赤, 黄, 青]
    }
}

9行目は、配列です。
10行目は、リストです。
12行目は、CollectionsクラスのaddAllメソッドで配列からリストに変換しています。
リストを変更しても元の配列は変更されません。

リストを配列に変換する

package test1;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Test1 {
    public static void main(String[] args) {
    	// リスト
    	List<String> list1 = new ArrayList<>(Arrays.asList("赤","黄","青"));
    	// 配列
    	String[] ar1 = new String[list1.size()];
    	
		// リストから配列を作成
    	list1.toArray(ar1);
		
		System.out.println(Arrays.toString(ar1));//[赤, 黄, 青]
    }
}

9行目は、リストを作成しています。
11行目は、配列で中身は空です。配列の要素数はリストのサイズでセットしています。
14行目は、toArrayメソッドでリストの値を配列にセットしています。
16行目は、配列の値を表示しています。
ArraysクラスのtoStringメソッドは、配列を引数にして、文字列を返します。

メソッドの引数と戻り値が配列

package test1;

public class Test1 {
    public static void main(String[] args) {

    	String[] color = {"赤","黄","青"};

        String[] b = getColor(color);
    }

    private static String[] getColor(String[] c1) {
        return c1;
    }
}

6行目は、配列です。値もセットしています。
8行目は、呼び出し元のメソッドです。引数と戻り値が配列です。
11行目は、定義されたメソッドです。引数と戻り値が配列です。
・「getColor(String[ ] c1)」のString[ ] はデータ型でc1が引数です。
・「private static String [ ] 」のString[ ]はデータ型です。

呼び出し元のメソッドの引数の変数名(8行目のcolor)と定義されたメソッドの引数の変数名(11行目のc1)は異なっていても使用できます。

2次元配列を作成する

package test1;

public class Test1 {
	public static void main(String[] args) {

		String[][] a = {
			{"赤1","黄1","青1"},
			{"赤2","黄2","青2"}
		};
		System.out.println(a[0][0]); //赤1
		System.out.println(a[0][1]); //黄1
		System.out.println(a[0][2]); //青1
		System.out.println(a[1][0]); //赤2
		System.out.println(a[1][1]); //黄2
		System.out.println(a[1][2]); //青2
	}
}

6行目は、ブラケット[ ]を2つにして2次元配列を作成しています。
10~15行目は、2次元配列の値を表示しています。

関連の記事

Java 拡張for文のサンプル(break/continue)
Java 配列からリストを作成する(addAll/asList)

△上に戻る