まめログ

Javaプログラマの歩み

【Java】ListインタフェースとArrayListの使い方 入門

Javaのコレクション Listインタフェース

Javaには複数のデータを扱うための仕組みが用意されており、その中の一つがListです。
今回はListの使い方を解説します。
docs.oracle.com

Listの宣言と初期化

List自体はインタフェースであり、実装クラスのインスタンスを生成する必要があります。
Listを実装したクラスとしては、ArrayListとLinkedListがあります。
今回はArrayListを使ってコードを記述していきます。
まず宣言です。

List<String> names = new ArrayList<>();

実装クラスのArrayList型ではなくListインタフェース型として変数を宣言します。*1
<>(ダイヤモンド演算子)の中に、コレクションに格納したい型を記述することで、
その型専用のコレクションとして使うことができます。

//Student型のコレクションを宣言・初期化
List<Student> students = new ArrayList<>();
//String型のコレクションを宣言・初期化
List<String> names = new ArrayList<>();

変数名はコレクションなので複数形にすることが多いです。
newするクラスはArrayListで、こちらにもダイヤモンド演算子がありますが、こちらの型の記述は省略することができます。
docs.oracle.com

要素の追加

Listに要素を追加するにはaddメソッドを用います。

names.add("白石麻衣");
names.add("生田絵梨花");
names.add("松村沙友理");

配列と違い、要素数は可変なので追加する際に気にする必要はありません。

要素の挿入

要素の挿入にもaddメソッドを使います。追加と違うのは第1引数に挿入するインデックス番号を指定することです。

//インデックス1に要素が挿入される。インデックス1以降にあった要素は、インデックス2以降に自動的に移動させられる。
names.add(1,"橋本奈々未");

要素の削除

Listの要素を削除するにはremoveメソッドを用います。
removeメソッドの引数には削除したい要素のインデックス番号を用います。コレクションも配列同様インデックスは0から始まります。
また、removeメソッドの戻り値は削除した要素です。

names.remove(2) 

要素の取得

List内に格納された要素を取得するにはgetメソッドを用います。
getメソッドの引数には取得したい要素のインデックス番号を指定します。コレクションも配列同様インデックスは0から始まります。

System.out.println(names.get(0)); //白石麻衣と表示される

素数の取得

Listに格納されている要素数を取得するにはsizeメソッドを用います。

names.size();

Stringを格納するListの変数宣言から要素の追加・削除・要素の取得の一連の流れ

ここまでで説明したListの宣言方法とその要素の追加や削除など一連の流れをまとめて説明します。

//コレクション変数の宣言と初期化
List<String> names = new ArrayList<>();
//要素の追加
names.add("白石麻衣");
names.add("生田絵梨花");
names.add("松村沙友理");
   
 //要素の削除
 names.remove(1);
 //for文による全件操作
 for (int i = 0; i < names.size(); i++) {
      System.out.println(names);
 }

独自オブジェクトを格納するListの変数宣言から要素の追加・削除・要素の取得の一連の流れ

ダイヤモンド演算子で指定するクラスはJavaの標準のクラスだけではなく、自分で作成したクラスを指定することも出来ます。
今回はStudentクラスというクラスを作成し、そのコレクションを宣言、使用します。

//Student型のコレクションを宣言・初期化
List<Student> students = new ArrayList<>();
//Listに格納するStudent型インスタンスの作成
students.add(new Student("111","遥香","賀喜"));
students.add(new Student("222","さくら","遠藤"));
//メソッドの戻り値を直接格納することもできる
students.add(getStudentsByNumber("333"));

students.stream().forEach(System.out::println);

for文による全件操作

for文を使ってコレクションを操作する方法です。
素数は配列と違ってsizeメソッドを用い、要素の取得にはgetメソッドを用います。

for (int i = 0; i < names.size(); i++) {
            System.out.println(names.get(i));
}

拡張for文による全件操作

拡張for文で記述することも可能です。

for (String name : names) {
      System.out.println(name);
}

StreamとforEachを使った全件操作

Java8から導入されたStream APIを使っても操作することが可能です。
今現在はこの手法が主流だと思います。

names.stream().forEach(System.out::println);

*1:ArrayList型で宣言しても問題はない