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

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

仕組み 配列とは
作成 初期化して作成 / 要素の数を宣言して作成 / 同じ値を設定する(fill)
取得する 要素を取得(for文、拡張for文、forEach) / 要素を検索
  要素数を取得(length) / 最後の要素を取得(length-1)
変更 配列の値を変更
ソート/コピー 要素をソート / 要素をコピー
変換 配列をリストに変換 / リストを配列に変換
使用する メソッドの引数と戻り値が配列

配列とは

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

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

配列の図

  • 1つの変数で同じ型の複数の値を保持できます。
  • 各項目を要素(element)といいます。
  • 要素の位置をインデックス(添字)で管理します。上記図では[0]、[1]、[2]、[3]です。
  • int等の基本型だけでなくInteger等の参照型も保持できます。
  • インデックスの先頭は0から始まります。
  • Javaの配列は固定長です。後から要素の追加や削除は不可能です。
  • 後から配列の数を変更する場合はコレクションのArrayListを使用します。
    Java ArrayListとListの使い方のサンプル

初期化して作成

配列の宣言と同時に値を設定します。

  String[] a = {"赤","黄","青"};  // String型の配列
  System.out.println(a[0]);//赤
  System.out.println(a[1]);//黄
  System.out.println(a[2]);//青
		
  int[] b = {1,2,3};  // int型の配列
  System.out.println(b[0]);//1
  System.out.println(b[1]);//2
  System.out.println(b[2]);//3
		
  Integer[] c = {4,5,6};  // Integer型の配列
  System.out.println(c[0]);//4
  System.out.println(c[1]);//5
  System.out.println(c[2]);//6
		
  byte [] d = {-128,5,127};  // byte型の配列
  System.out.println(d[0]);//-128
  System.out.println(d[1]);//5
  System.out.println(d[2]);//127

16行目は、バイト配列です。データ型がバイト(byte)型で値が-128~127までの数値です。

要素の数を宣言して作成

先に配列の要素の数を宣言して値は後から追加します。

public class Test1 {
	public static void main(String[] args) {
		String[] color = new String[3]; // 要素数の3を指定
		color[0] = "赤"; // 値を設定
		color[1] = "黄";
		color[2] = "青";
		// color[3] = "黒"; ArrayIndexOutOfBoundsExceptionが発生

		System.out.println(color[0]);// 赤
		System.out.println(color[1]);// 黄
		System.out.println(color[2]);// 青
	}
}

7行目のように4つめの値を追加しようとするとArrayIndexOutOfBoundsのエラーが発生します。

同じ値を設定する(fill)

Arrays.fill(配列の変数, 設定する値)

fillメソッドは同じ値を設定します。

  String[] color = new String[3];
  Arrays.fill(color, "オレンジ");
		
  System.out.println(color[0]); //オレンジ
  System.out.println(color[1]); //オレンジ
  System.out.println(color[2]); //オレンジ

 

要素を取得(for文、拡張for文、forEach)

要素の位置は0から始まります。
for文とforEachはループで要素を順に取得します。

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

   System.out.println(color[0]); // 赤
   System.out.println(color[1]); // 黄
   System.out.println(color[2]); // 青

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

   // 拡張for文 加算(i++)の表記なし
   for (String a : color) {
     System.out.println(a); // 赤 黄 青
   }

   // forEach + ラムダ式
   Arrays.stream(color).forEach(c -> System.out.println(c));// 赤 黄 青

   // forEach + メソッド参照
   Arrays.stream(color).forEach(System.out::println);// 赤 黄 青

18行目の変数c以降はラムダ式です。forEachメソッドは、Java8で導入されました。
21行目のSystem.out::printlnは、メソッド参照です。

要素を検索

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

    String[] color = { "赤", "黄", "青" }; // 配列
    boolean b1 = false;

    for (String c : color) {
      if (c.equals("黄")) {
        b1 = true;
        break;
      }
    }
    System.out.println(b1); // true

 

要素数を取得

lengthプロパティで配列の要素数を取得します。

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

 

最後の要素を取得(length-1)

lengthプロパティで要素数を取得し1引いてインデックスとして指定します。

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

 

配列の値を変更

インデックス(添字)で変更したい要素を指定します。

	String[] arr = { "赤", "黄", "青" }; // 配列

	arr[1] = "オレンジ";

	System.out.println(arr[0]); // 赤
	System.out.println(arr[1]); // オレンジ
	System.out.println(arr[2]); // 青

3行目は、文字列を配列の変数に代入しています。

要素をソート

Arrays.sortを使用します。

	int[] arrNum = { 100, 2, 99 }; // 配列 数値をソート
	Arrays.sort(arrNum);
	System.out.println(Arrays.toString(arrNum)); // [2, 99, 100]

	String[] arrStr = { "da", "abb", "pccc" }; // 配列 文字列をソート
	Arrays.sort(arrStr);
	System.out.println(Arrays.toString(arrStr)); // [abb, da, pccc]

3行目は、2,99,100になります。100,2,99にはなりません。
7行目は、先頭の文字のabc順に表示されます。

要素をコピー

public static void arraycopy(コピー元配列,開始位置,コピー先配列,開始位置,コピーする要素数)

Systemクラスのarraycopyメソッドで配列をコピーします。

	String[] arrFrom = { "赤", "黄", "青" }; // コピー元の配列
	String[] arrTo = new String[3]; // コピー先の配列

	System.arraycopy(arrFrom, 0, arrTo, 0, arrFrom.length);

	arrTo[1] = "オレンジ"; // コピー先の配列を変更
	System.out.println(Arrays.toString(arrFrom)); // 赤 黄 青
	System.out.println(Arrays.toString(arrTo)); // 赤 オレンジ 青

6行目は、コピー先の配列の値を変更しています。
7,8行目は、コピー先の値は変わりましたが、コピー元の値は変更されていません。

配列をリストに変換

CollectionsクラスのaddAllメソッドを使用します。リストを変更しても元の配列は変更されません。

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

	Collections.addAll(list, arr);

	System.out.println(list); // [赤, 黄, 青]

リストは参照型のみ設定可能のため、1行目の配列の値がintなどの基本型の場合は4行目でコンパイルエラーになります。

リストを配列に変換

toArrayメソッドでリストの値を配列にします。

	// リスト
	List<String> list = new ArrayList<>(Arrays.asList("赤", "青"));
	// 配列
	String[] arr = new String[list.size()];

	// リストから配列を作成
	list.toArray(arr);
	System.out.println(Arrays.toString(arr));// [赤, 青]

4行目は、配列で中身は空です。配列の要素数はリストのサイズでセットしています。
8行目のtoStringメソッドは、配列を引数にして文字列を返します。

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

  String[] color = {"赤","黄","青"}; // 配列
  String[] b = getColor(color);

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

2行目は、呼び出し元のメソッドです。引数と戻り値が配列です。
4行目は、定義されたメソッドです。引数と戻り値が配列です。

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

関連の記事

Java 2次元配列のサンプル
Java 配列からリスト・セットを作成(addAll/asList)
Java バイト配列の作成と復号のサンプル(getBytes)

△上に戻る