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[] color1 = new String[3]; // 要素数の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]);// 青
  }
}

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

同じ値を設定する(fill)

Arrays.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)

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

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

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

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

    // 拡張for文 加算(i++)の表記なし
    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);// 赤 黄 青

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[] a = {"赤","黄","青"}; // 配列
		
  a[1] = "オレンジ";
		
  System.out.println(a[0]); //赤
  System.out.println(a[1]); //オレンジ
  System.out.println(a[2]); //青

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

要素をソート

Arrays.sortを使用します。

  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(コピー元配列,開始位置,コピー先配列,開始位置,コピーする要素数)

Systemクラスの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)); //赤 オレンジ 青

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

配列をリストに変換

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

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

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

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

リストを配列に変換

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

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

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)

△上に戻る