java.utilパッケージに分類されるコレクションフレームワーク「List」「Map」「Set」の中のListについての説明記事です。
この記事内のクラスはジェネリクスを使用してます。
種類 | 概要 |
---|---|
List | 配列に近い構造を持っている。要素を番号で管理する。 |
Map | 要素にキー(要素を区別する値)を付けて管理する。キーの重複は不可。 |
Set | 要素に順番はなく、要素の重複を許可しない。 |
Listはインタフェースとして定義されており、Listインタフェースを実装するクラスがあります。
Listインタフェース | |
---|---|
実装クラス | 概要 |
ArrayList | 基本的なコレクションで配列に近い構造を持っている。 |
LinkedList | 要素同士を前後双方向の関係性(リンク)を保持している。基本的に、要素の追加や削除を多用する場合にはArrayListよりも高速になる。 |
もくじ
ArrayListのインスタンス生成
コレクションフレームワークの中でも最も利用しやすいクラスがArrayListです。ArrayListは配列と同じような構造を持っており、また配列よりも便利にデータを管理できます。
ArrayListの インスタンス生成 |
List<型> インスタンス変数名 = new ArrayList<型>() ; |
---|---|
記述例 | List<Integer> list = new ArrayList<Integer>() ;
List<String> name_list = new ArrayList<String>() ; |
宣言する型はListインターフェイスになっていますが「ArrayList<Integer> list」や「ArrayList<String> name_list」という記述でも宣言可能です。
LinkedListのインスタンス生成
LinkedListはArrayList同様に配列に近い用法で利用しますが、前述の通り要素の追加や削除を多用する際に向いています。
LinkedListの インスタンス生成 |
List<型> インスタンス変数名 = new LinkedList<型>() ; |
---|---|
記述例 | List<Integer> list = new LinkedList<Integer>() ;
List<String> name_list = new LinkedList<String>() ; |
宣言する型はListインターフェイスになっていますが「LinkedList<Integer> list」や「LinkedList<String> name_list」という記述でも宣言可能です。
ArrayListおよびLinkedListのメソッドを利用してデータを扱う
ArrayListおよびLinkedListのメソッドの種類や利用法は同じです。つまり、インスタンス生成の部分以外は記述の違いを意識する必要はありません。
戻り値の型や引数部分のEはジェネリクスで指定した型です。例えば「List<String>」の場合はEを全てStringに置き換えてください。
メソッド名 | 戻り値の型 | 引数 | 処理内容 |
---|---|---|---|
add | boolean | E element | リストの最後に引数で指定した要素を格納します。 |
add | boolean | int index, E element |
第一引数で指定した位置に、第二引数で指定した要素を格納します。挿入した以降の要素はインデックスが+1ずつずれます。 |
clear | void | なし | リスト内の要素を全て削除します。 |
get | E element | int index | 引数で指定した位置の要素を戻り値で取得できます。 |
remove | E element | int index | 引数で指定した位置の要素を削除します。以降の要素はインデックスが-1ずつずれます。
戻り値は削除した要素です。 |
set | E element | int index, E element | 第一引数で指定した位置の要素を第二引数の要素で上書きします。
戻り値は上書き前の要素です。 |
size | int size | なし | リスト内の要素数を戻り値で取得できます。 |
リスト サンプルプログラム
以下のプログラムを「Number50.java」という名前でWorkフォルダ内に保存します。
保存が完了したら、コマンドプロンプトを起動し、Number50.javaをコンパイルしてみましょう。※プログラムが長いため、必要に応じてコピペで確認してください
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
//java.utilパッケージなのでインポートが必要 import java.util.ArrayList; import java.util.List; class Number50{ public static void main(String[] args){ List<String> list = new ArrayList<String>(); //格納するデータを用意 String a = "田中さん"; String b = "鈴木さん"; String c = "佐藤さん"; //コレクションに格納 list.add(a); list.add(b); list.add(c); System.out.println("要素0番目は" + list.get(0)); //最初の要素を取得 System.out.println("要素2番目は" + list.get(2)); //最後の要素を取得 list.add(1,"清水さん"); System.out.println("要素2番目は" + list.get(2)); System.out.println("リスト内には" + list.size() + "個の要素があります"); } } |
実行例
C:\work>javac Number50.java
C:\work>java Number50
要素0番目は田中さん
要素2番目は佐藤さん
要素2番目は鈴木さん
リスト内には4個の要素があります
リスト 復習問題
- ArrayListについての説明で誤っているものを選んでください
- 解答群
- 配列に近い構造を持っている
- インデックスは0から始まる
- リスト内の要素は削除できる
- Mapインターフェイスを実装している
- LinkedListについての説明で誤っているものを選んでください
- 解答群
- 要素の追加や削除はArrayListよりも高速で動作する
- ArrayListのメソッドとは名称も種類も全く別のものを利用する
- Listインターフェイスを実装している
- インデックスは0から始まる
- add(E element)メソッドの説明として誤っているものを選んでください
- 解答群
- 引数にはジェネリクスで指定した型のデータを指定する
- 戻り値はない
- リストの最後に要素を追加する
- 戻り値の型はboolean
- set(int index, E element)メソッドの説明として誤っているものを選んでください
- 解答群
- 戻り値がある
- 第一引数で指定した位置に、第二引数で指定した要素を上書きする
- 第一引数で指定した位置に、第二引数で指定した要素を追加する
- 第二引数にはジェネリクスで指定した型のデータを指定する
- remove(int index)メソッドの説明として誤っているものを選んでください
- 解答群
- 削除した部分のインデックスは空データとして扱われる
- 削除した部分以降のインデックスは-1ずれる
- 削除したデータが戻り値で取得できる
- 要素数が5のリストに対してremove(5)は指定できない
- お疲れ様でした。
まとめ
-
- ArrayListはシンプルなリストで配列に近い構造を持っている
- 要素の追加や削除を多用する際にはLinkedListの方が高速となる
- ArrayListおよびLinkedListのメソッドは使い分けをする必要はない
- メソッドを利用して要素の追加、削除、取得等が可能