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 = {"赤","黄","青"};
  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
		
  byte [] d = {-128,5,127};
  System.out.println(d[0]);//-128
  System.out.println(d[1]);//5
  System.out.println(d[2]);//127

1行目は、String型の配列を作成しています。
6行目は、int型の配列を作成しています。
11行目は、Integer型の配列を作成しています。
16行目は、バイト配列です。データ型がバイト(byte)型で値が-128~127までの数値です。

要素の数を宣言して作成

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

  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]);//青

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

同じ値を設定する(fill)

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

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

 

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

  String[] c1 = {"赤","黄","青"}; // 配列
		
  // for文
  for (int i = 0; i < c1.length; i++) {
    System.out.println(c1[i]); //赤 黄 青
  }
		
  // 拡張for文
  for (String a : c1) {
    System.out.println(a); //赤 黄 青
  }
		
  // forEach + ラムダ式
  Arrays.stream(c1).forEach(c -> System.out.println(c));//赤 黄 青
		
  // forEach + メソッド参照
  Arrays.stream(c1).forEach(System.out::println);//赤 黄 青

4行目は、for文で配列の各値を表示しています。
9行目は、拡張for文です。
14行目は、forEachメソッドです。変数c以降はラムダ式です。
17行目のSystem.out::printlnは、メソッド参照です。
forEachメソッドは、Java8で導入されました。

要素を検索

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

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

要素数を取得

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

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

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

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

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

配列の値を変更

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

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

要素をソート

  int[] a = {100,2,99}; // 配列 数値
  Arrays.sort(a);
  System.out.println(Arrays.toString(a)); // [2, 99, 100]
		
  String [] c = {"da","abb","pccc"}; // 配列 文字列
  Arrays.sort(c);
    System.out.println(Arrays.toString(c)); // [abb, da, pccc]

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

要素をコピー

public static void arraycopy(コピー元配列,開始位置,コピー先配列,開始位置,コピーする要素数)
  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)); //赤 オレンジ 青

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

配列をリストに変換

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

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

4行目は、CollectionsクラスのaddAllメソッドで配列からリストに変換しています。
リストを変更しても元の配列は変更されません。
1行目の配列の値がintなどの基本型の場合は4行目でコンパイルエラーになります。
リストは参照型のみ可能です。

リストを配列に変換

  // リスト
  List<String> list1 = new ArrayList<>(Arrays.asList("赤","青"));
  // 配列
  String[] ar1 = new String[list1.size()];
    	
  // リストから配列を作成
  list1.toArray(ar1);
  System.out.println(Arrays.toString(ar1));//[赤, 青]

2行目は、リストを作成しています。
4行目は、配列で中身は空です。配列の要素数はリストのサイズでセットしています。
7行目は、toArrayメソッドでリストの値を配列にセットしています。
8行目のArraysクラスの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)

△上に戻る