【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)); //白石麻衣と表示される
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);