この記事の要点
- リストは、要素を順序付けして管理するコレクションの一種
- Javaでリストを使うために、ListインターフェースやArrayListクラスが提供されている
- Listを実装(implements)したクラスは、ArrayListの他にもLinkedListなどがあり、それぞれ長所と短所がある
以前、Javaでの副業についてどのような案件が多いのか、受注するためにどんなスキルが必要なのかなど、基礎についてご紹介していました。
Javaでリストを使ったことはあるでしょうか?
要素数が固定の配列とは異なり、自由に要素を追加できる点が便利なリストですが、使い方は配列より複雑です。
当記事では、JavaのListインターフェースについてサンプルコード付きで分かりやすく解説しています。
これを読めば、ListとArrayListの関係性や具体的な使い方が分かるようになります。
リストとは
リストとは、複数のものをまとめて管理するための入れ物(コレクション)の一種です。
コレクションに対しては、要素を追加したり、要素を取り出したり、要素を変更したり、要素を削除したりできます。
リストの特徴は、要素を順序付けして管理していることです。
具体的には、「1番目の要素を取り出す」「3番目に要素を追加する」のような操作ができます。
この点は配列に似ています。
Javaでどのようにリストを実現しているか
Javaでは、「java.util.List」インターフェースでリスト構造が提供されています。
インターフェースなので、Listをそのままインスタンス化することはできません。
実際に利用するときは、ArrayListなどのListを実装(implements)したクラスを使います。
ArrayListとの違いとは
ArrayListは、リストの一種です。
つまり、Listインターフェースを実装(implements)したクラスの中の1つです。
ArrayListの特徴は、配列のように、要素を隣り合ったメモリに格納していくところです。
ListとArrayListの関係性
「ListとArrayList」の関係性は、「動物と犬」の関係性に似ています。
動物の中には、犬の他にも猫や鳥といった種類があるように、
Listの中にはArrayListの他にもLinkedListやVectorといった種類があります。
どのリストも万能なわけではなく、それぞれに得意、不得意があります。
例えばArrayListは、要素の取得が速く、要素の挿入や削除が遅いという特徴があります。
速度を気にしないなら全てArrayListを使えばいいですが、理想はケースバイケースでリストを使い分けられることです。
それぞれの長所、短所をまとめておいたので、参考にしてみてください。
List名 | 長所 | 短所 |
---|---|---|
ArrayList | 要素の取得が速い | 要素の挿入、削除が遅い |
LinkedList | 要素の挿入、削除が速い | 要素の取得が遅い |
Vector | 複数スレッドから同時アクセスOK | 全体的に遅い |
Listの基本的な使い方
先述の通り、Listはインターフェースなので、インスタンス化できません。
List型は、ArrayListなどのListを実装(implements)したクラスのインスタンスを取り扱うために使います。
List<要素の型名> list = new ArrayList<>();
Javaでリストを使う場合は、「」の中に、そのリストで取り扱う要素の型を指定します。
例えば文字列を取り扱う場合は、とします。
この「」はジェネリクスという仕組みですが、やや難しいので、ここでは書き方だけ覚えれば問題ありません。
それでは、サンプルコードを見てみましょう。
List<String> list = new ArrayList<>(); list.add("apple"); list.add("lemon"); list.add("grape"); for(int i = 0; i < list.size(); i++){ String str = list.get(i); System.out.println(i + "番目の要素:" + str); }
出力結果
0番目の要素:apple
1番目の要素:lemon
2番目の要素:grape
Listに順番に文字列を追加し、順番に取り出して出力するプログラムです。
各メソッドについての説明はこの後行います。
ArrayListのインスタンスをnewで生成し、List型の変数で受け取っています。
この場合は別にArrayList型の変数で受け取ってもいいのですが、List型の変数はListを実装(implements)しているクラスのインスタンスなら全て扱えるので、柔軟性に優れています。
Listのメソッドの使い方
Listインターフェースには、要素を操作するための様々な抽象メソッドが用意されています。
よく使われるものをピックアップしてご紹介します。
戻り値 | メソッド | 説明 |
---|---|---|
boolean | add(E e) | リストの最後に要素を追加する。 |
void | add(int index, E element) | 第一引数で指定した位置に、要素を挿入する。 |
E | get(int index) | 引数で指定した位置の要素を取得する。 |
boolean | contains(Object o) | 引数のオブジェクトがリスト内にあるか判定する(あればtrue、なければfalse)。 |
boolean | remove(int index) | 引数で指定した位置の要素を削除する。 |
boolean | isEmpty() | このリストに要素がない場合にtrueを返す。 |
int | size() | リスト内の要素の数を取得する。 |
※表中の「E」は、リストに格納する要素の型を表します
List<String> list = new ArrayList<>(); list.isEmpty(); // true list.add("apple"); // [apple] list.add("lemon"); // [apple, lemon] list.add(1, "grape"); // [apple, grape, lemon] list.get(2); // "lemon" list.contains("apple"); // true list.contains("melon"); // false list.remove(1); // [apple, lemon] list.isEmpty(); // false list.size(); // 2
まとめ
当記事では、リストについての説明や、JavaのListインターフェースの使い方について解説しました。
最初にサイズを指定する配列と違い、リストは自由に要素を追加、削除できるところが便利です。
使えるシーンも多いと思いますので、覚えておいて絶対に損はありません。
各種メソッドなどは使いながら覚えていけばよいので、まずはリストを生成するやり方をしっかりマスターしましょう。
また、Javaでできることが増えてきたと感じたら実際にあるサービスを真似て作成したり、自身でオリジナルサービスを作成したりするのがいいでしょう。
Java初心者でも作れるものをまとめて紹介していますので参考にしてください。