Java インターフェース 〜Listの使い方、ワンポイントレッスン的な〜

イントロダクション

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」と違うんだな!』と理解していただければ。。。

ArrayListLinkedListを比較してみましたが、結果は変わりませんでした。


テスト実行したソースは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);
    }

投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す