イントロダクション
Javaの場合、インターフェースはよく使うもので「List」と「Map」があります。
<List>
<Map>
Listインターフェース
インターフェースは実体を持たないクラスです。。。と記載しても意味がわからないと思います。コードで語りましょう。
public static void main(String[] args) { /* 配列(String[]型)のリストList<E>の * Eはエレメント(要素)で実際はなんでも良い */ List<String> list1 = new ArrayList<String>(); // 要素を順番に登録するLinkさせてリストを作ります。 List<String> list2 = new LinkedList<String>(); }
正直、LinkedListをうまく説明できていないと思います。現状ではとりあえず『「ArrayList」と違うんだな!』と理解していただければ。。。
ArrayListとLinkedListを比較してみましたが、結果は変わりませんでした。
テスト実行したソースはGitにアップしました。
早い話
インターフェース(List)を実装しているクラスは全く関係のないクラスだったとしてもListとして使用できるということです。
※実際には、オーバーライドしなくてはいけないメソッドがあるので、処理内容が限定されます。
処理スピードが違うという噂を聞きましたが、この違いは大量データを厚勝つ時にはList, MapよりもHashTableを使用する方が良いと思っているので、考えたことがありませんです。。。
サンプルコード:ArrayList
Listインターフェースをimplementsしているので下のように書くことができる
@Test
public void testAdd() {
List<String> list = new ArrayList<>();
list.add("その1");
list.add("その2");
list.add("その3");
list.add("その4");
for (String st : list) {
System.out.println(st);
}
}
サンプルコード:LinkedList
Listインターフェースをimplementsしているので、newするクラスが別でも、同じメソッドを呼び出すことができる。
@Test
public void testAddFirst() {
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.forEach(System.out::println);
}