Listインターフェース
コレクションフレームワークに属するListインターフェースは配列と同じように0からのインデックスで要素の集まりを扱います。
配列との大きな差は配列は要素の追加が出来ないのに対し、Listインターフェースは要素の追加・削除が可能なことです。
配列との大きな差は配列は要素の追加が出来ないのに対し、Listインターフェースは要素の追加・削除が可能なことです。
Listインターフェースのメソッドのうち、addメソッドは指定された要素をリストの最後に追加し、clearメソッドは指定された全ての要素をリストから削除し、removeメソッドは指定された要素をリストの先頭から探し、最初に見つかった同じ要素をリストから削除し、setメソッドはリスト内の指定された位置にある要素を、指定された要素に置き換えます。なお、addメソッドにはリスト内の指定された位置に、指定された要素を挿入するメソッド、removeメソッドには指定された位置にある要素を削除するメソッドもあります。
Listインターフェースの実装クラスで良く用いられるのはArrayListクラスです。
なお、ArrayListの宣言では扱う要素の型をジェネリックとして< >の中に記述し、それ以外の型のオブジェクトが追加されないようコンパイラーにチェックさせます。
また、要素の取り出しにはfor文、拡張for文、iteratorを使用します。
なお、ArrayListの宣言では扱う要素の型をジェネリックとして< >の中に記述し、それ以外の型のオブジェクトが追加されないようコンパイラーにチェックさせます。
また、要素の取り出しにはfor文、拡張for文、iteratorを使用します。
Listの実装クラスにArrayListを利用した例
import java.util.List; import java.util.ArrayList; import java.util.Iterator; public class ListSample { public static void main(String[] args) { List<String> list=new ArrayList<>( ); System.out.println(list.size()); System.out.println("---------------"); list.add("B"); list.add("C"); list.add(0, "A"); for(int i=0; i<list.size(); i++) { System.out.println(list.get(i)); } System.out.println("---------------"); list.add("A"); for(String str: list) { System.out.println(str); } System.out.println("---------------"); list.set(3, "D"); for(Iterator<String> it = list.iterator(); it.hasNext();) { System.out.println(it.next()); } System.out.println("---------------"); list.remove(0); System.out.println(list); } }
実行結果
>java ListSample 0 --------------- A B C --------------- A B C A --------------- A B C D --------------- [B, C, D] >
Listインターフェースを実装したクラスには、ArrayListのように要素を連続的に並べるのではなくリンク情報で関連付けたLinkedListがあります。LinkedListの機能はArrayListと変わりませんがリンク情報の書き換えで要素の挿入、削除が行えるのでArrayListよりもそれらの処理が早く行えます。しかし、逆に、連続的に要素を扱う読出しや書き込みはArrayListよりも処理が遅くなります。
Listの実装クラスにLinkedListを利用した例
import java.util.List; import java.util.LinkedList; import java.util.Iterator; public class LinkedListSample { public static void main(String[] args) { List<String> list=new LinkedList<>( ); System.out.println(list.size()); System.out.println("---------------"); list.add("B"); list.add("C"); list.add(0, "A"); for(int i=0; i<list.size(); i++) { System.out.println(list.get(i)); } System.out.println("---------------"); list.add("A"); for(String str: list) { System.out.println(str); } System.out.println("---------------"); list.set(3, "D"); for(Iterator<String> it = list.iterator(); it.hasNext();) { System.out.println(it.next()); } System.out.println("---------------"); list.remove(0); System.out.println(list); } }
実行結果
同じインターフェースを実装しているので実行結果に違いはありません。
>java ListSample 0 --------------- A B C --------------- A B C A --------------- A B C D --------------- [B, C, D] >