【サンプル有】Java listの使い方 - 型の説明や配列との違いについても解説
公開日:2021.09.30
スキルアップWebサービスやAndroidアプリで多く使われているJavaには、複数のデータを管理する際、いくつかやり方があります。複数のデータを管理する際は、多くの場合、他の言語でもよく使われる配列型を想像しますが、Javaでは固定長(長さが変更できない)となっており、例えばPHPの配列のような感覚では使用できません。
そこで登場するのがList型です。要素数が可変のList型は、Java以外の言語を多く使う方にとって使いやすいものです。
そこで、今回はJavaで複数のデータを管理する方法として、List型の中でも特に便利なArrayListを例にご紹介します。
なお、Java言語自体についてより詳しく知りたい方は、以下ページをご参照ください。
関連記事:IT・エンジニア必見!Javaについて徹底解説――習得して今の仕事や今後のキャリアに活かそう!
Java の List 型とは?
まずはJavaのList型について理解しましょう。配列と比較されることが多いですが、List型を使う方が便利なシーンもたくさんあります。
List型は要素を順序だててまとめたもの
JavaのList型は要素を順序だててまとめたものであり、考え方としては配列に近いものです。
List型にはLinkedList、Vector、ArrayListなどかあります。例えば、LinkedListはArrayListと比較して追加、削除の速度が速かったり、VectorはArrayListが対応していないマルチスレッドに対応しているなど、少しずつ違いがあります。
ここでは一番多く使われると思われるArrayListを使用して解説します。
List型と配列の違い
配列は初期化の際に要素数を指定する必要があります。入力フォームからのデータなど、常に格納する要素数が決まっている場合は、配列でもそれほど困りませんが、増減がある場合は配列では若干扱いにくくなります。
List型は指定不要であとから足していけるので、初期化の際に要素数を気にすることなく使えるのが便利です。引数を持たせれば割り込みで要素を追加したり、特定の要素だけ消したりといった融通も効きます。
【Java】ArrayListの書き方
ここからはサンプルを用いて、実際のコードの書き方を見ていきます。それぞれ一番シンプルな書き方にしてあるので、処理の流れを確認したあと、自分でも同じコードを書いてみましょう。
コピペでも問題はありませんが、コメントの書き方や、処理終わりのセミコロンを忘れないことなど、自分で打つからこそ勉強になる点もあるので、初心者の方にはおすすめです。
List型の宣言方法
// String型の要素のコレクションを作成
List<String> list = new ArrayList<String>();
他の型と同様に、newで新しいインスタンスを生成します。Integer型など、String型以外でも生成できますが、型が違うと要素をリストに格納できなくなります。特別目的がなければString型で格納して、取り出したあとに型変換する方が簡単な処理で書けます。
.size() - List型の要素数をカウントする
// 記述方法: list.size(0);
// サンプル
// String型の要素のコレクションを作成
List<String> list = new ArrayList<String>();
// List型の list の中に要素が何個あるかをカウントする
System.out.println(list.size()); // 0が出力される
サンプルのコードはまだリストに何も要素を入れていないので、カウントの結果を表示すると0で出ます。データがきちんと挿入できたか確認するためや、リストの最後までfor文を回す際の終了条件などに要素数を使います。
このあとのサンプルコードでも、挿入や削除の確認のために.size()で要素数を数えて出力していきます。
.add() - List型に要素を挿入する
// 記述方法: list.add("text1");
// サンプル
// String型の要素のコレクションを作成
List<String> list = new ArrayList<String>();
// 要素を追加する
list.add("text1");
list.add("text2");
// List型の list の中に要素が何個あるかをカウントする
System.out.println(list.size()); // 2が出力される
要素を追加する際はadd()を使って追加していきます。インデックスを指定しなければ末尾にどんどん追加されていく形です。サンプルコードはtext1とtext2を追加しているのでsize();で数えると2が出力されます。
またlist.add(1,"text1");の形でインデックスを指定して、要素を追加することもできます。この場合、割り込んで要素が追加されるため、指定したインデックスより、あとのデータはインデックスの番号が一つずつずれます。
.get() - List型の要素を取得する
// 記述方法: list.get(1);
// サンプル
// String型の要素のコレクションを作成
List<String> list = new ArrayList<String>();
// 要素を追加する
list.add("text1");
list.add("text2");
// 2個目の要素(indexが1)を取得する
System.out.println(list.get(1)); // text2が出力される
リストの中に格納した要素を取得するためのメソッドです。インデックス番号は0から始まるので指定する際は注意しましょう。取得する要素のインデックスの番号をiなどの変数にしておくと、他のメソッドと組み合わせて、動的に使えます。
.remove() - List型の要素を削除する
// 記述方法: list.remove(2);
// サンプル
// String型の要素のコレクションを作成
List<String> list = new ArrayList<String>();
// 要素を追加する
list.add("text1");
list.add("text2");
// 要素を削除する
list.remove(1);
// List型の list の中に要素が何個あるかをカウントする
System.out.println(list.size()); // 1が出力される
要素を削除するときも、インデックスで消したい要素を指定して消します。サンプルコードはインデックスの1、text2を削除したので、リストにはtext1の1つしか格納されていません。
当然ですが消してしまった要素は元に戻りません。インデックスの番号で要素を指定して消すので、コード上は要素の中身を確認せずに消していくことになります。removeを使う際は十分に注意しましょう。
コード作成途中であれば、消す処理の前に同じインデックス番号の要素を表示させる
System.out.println(list.get(1));
のような処理を入れておくと、自分の消しているデータを確認しながらコーディングが進められます。
.clear() - List型の要素をすべて削除する
// 記述方法: list.clear();
// サンプル
// String型の要素のコレクションを作成
List<String> list = new ArrayList<String>();
// 要素を追加する
list.add("text1");
list.add("text2");
// 要素をすべて削除する
list.clear();
// List型の list の中に要素が何個あるかをカウントする
System.out.println(list.size()); // 0が出力される
リストの中身をすべて削除するときに使うメソッドです。処理の途中でリストの中身を一度初期化する際によく使われます。宣言したインスタンス自体は残っているので、あくまでも消えるのは格納されている要素のみとなり、入れ物は残る形です。
removeのときと同様に、消してしまったデータは元には戻りません。一つの処理の中で複数のリストを取り扱っているときは、間違って別のリストの中身を消してしまわないように注意しましょう。
.indexOf() - Listから検索する
// 記述方法: list.indexOf(1);
// サンプル
// String型の要素のコレクションを作成
List<String> list = new ArrayList<String>();
// 要素を追加する
list.add("text1");
list.add("text2");
// List型の list の中の text2 の index番号を取得する
System.out.println(list.indexOf("text2")); // 1が出力される
リストの要素を検索して、該当するインデックスの番号を出力するメソッドです。サンプルコードでは"text2"の文字列のインデックス番号を検索させています。
リストのなかに該当のデータが複数ある場合でも、このサンプルのコードでは1つ目に該当した要素のインデックス番号を表示して処理が終了します。該当データが複数想定され、インデックス番号を複数出したい場合は、for文と組み合わせて順番に出力するか、インデックス番号を入れる用のリストを別で作ってまとめて出力するなど、一工夫が必要になります。
Java の List型は難しくないので使いこなそう!
List型を使いこなすための基本のメソッドは、今回ご紹介したものが中心となります。ここから先は他のメソッドと組み合わせたり、変数を使ったりしながら行いたい処理を実現していきましょう。もちろん効率の良いコードの書き方はありますが、まずは思ったとおりに動くことが大事です。
規模が大きくなると取り扱いが難しくなるので、小規模な簡単なもので練習し、疑問に思ったところを順番に詰めていくと徐々に使えるようになっていきます。インターネットを検索すれば類似の処理が載っていることもあるので、参考にすると進みも早いでしょう。
AKKODiSでは、Javaのスキルを必要とするエンジニアの求人を豊富に用意しています。もちろん働き方や業務内容で選択が可能なので、Javaエンジニアの求人情報に興味がある方はぜひご確認ください。
(2021年9月現在)