HOWTO · Java

Java で ArrayList を返す方法

このチュートリアルでは、Java の関数から ArrayList を返します。

このページの内容

ArrayList は、Java の java.util パッケージにあるサイズ変更可能なコレクションです。これを返すには、ArrayList の戻り値型を宣言し、コレクションを作成して要素を入れ、return で返します。Java では、クラスの中で宣言された関数はメソッドと呼ばれます。操作がオブジェクトの状態を使用する場合はインスタンスメソッドを、呼び出し側がクラスを直接使用すべき場合は static メソッドを選択します。呼び出し側が一般的なリスト操作だけを必要とする場合、メソッドは戻り値型として List<T> インターフェースを宣言しつつ、ArrayList<T> オブジェクトを返すことができます。

Java の非 static 関数から ArrayList を返す

非 static メソッドは、そのクラスのインスタンスに属します。呼び出し側はまずそのクラスを構築し、次に生成されたオブジェクトに対してメソッドを呼び出します。この例では、ClassB が整数のリストを作成し、Main は List<Integer> として宣言された変数で返されたコレクションを受け取ります。List インターフェースは、呼び出し側がリスト操作だけを必要とする場合に便利な変数の型であり、一方でメソッドは具体的な ArrayList<Integer> 型を宣言できます。

完全なプログラムは 1 つの public クラスを使用し、その中に ClassB をネストしているため、例を 1 つの Java ソースファイルとして保存してコンパイルできます。main メソッドが呼び出し側です。ClassB を作成し、m1 を通して myNumbers() を呼び出し、返された値を出力します。

import java.util.ArrayList;
import java.util.List;

public class Main {
  static class ClassB {
    public ArrayList<Integer> myNumbers() {
      ArrayList<Integer> numbers = new ArrayList<>();
      numbers.add(10);
      numbers.add(15);
      numbers.add(30);
      return numbers;
    }
  }

  public static void main(String[] args) {
    ClassB m1 = new ClassB();
    List<Integer> listInMain = m1.myNumbers();
    System.out.println("The List is " + listInMain);
  }
}
The List is [10, 15, 30]

ジェネリック型 Integer は、コレクションが保持する要素を表します。メソッドは呼び出しごとに新しいリストを作成し、3 つの数値を追加して、そのリストを返します。呼び出し側は、返されたコレクションを読み取ったり、反復処理したり、値を追加したりできます。メソッドはリストへの参照を返します。コレクションを配列に変換するわけではありません。呼び出し側はその同じオブジェクトを受け取るため、返された参照を通して行われた変更は、メソッドが作成したリストに影響します。

Java の static 関数から ArrayList を返す

static メソッドは、特定のオブジェクトではなくクラスに属します。クラス名とメソッド名を使って呼び出すため、このバージョンは ClassB を構築しません。これは、メソッドの処理が特定のインスタンスに保存されたフィールドに依存しない場合に便利です。その本体は、インスタンスメソッドと同じ方法で ArrayList を作成して返します。

このスタンドアロンのプログラムは同じデータを使用しているため、呼び出しの形式に集中できます。メソッドが static と宣言されているため、Main は ClassB.myNumbers() として呼び出します。返された値は List<Integer> 変数に代入され、呼び出し側が出力します。

import java.util.ArrayList;
import java.util.List;

public class Main {
  static class ClassB {
    public static ArrayList<Integer> myNumbers() {
      ArrayList<Integer> numbers = new ArrayList<>();
      numbers.add(10);
      numbers.add(15);
      numbers.add(30);
      return numbers;
    }
  }

  public static void main(String[] args) {
    List<Integer> listInMain = ClassB.myNumbers();
    System.out.println("The List is " + listInMain);
  }
}
The List is [10, 15, 30]

操作がオブジェクトの状態を必要とする場合はインスタンスメソッドを使用し、クラスレベルでインスタンスが不要な場合は static メソッドを使用します。いずれの場合も、宣言された戻り値型を値と互換にし、呼び出し箇所で互換性のある型に結果を代入してください。return 文はメソッドを終了し、要素の入ったリストを呼び出し側に渡します。呼び出し側は通常の List 操作を使用できます。