2011年9月4日日曜日

Javaの私的まとめ18

Javaのお勉強その18

  1. NavigableSetとTreeSet

    TreeSetはNavigableSetを実装したものである。TreeSetに格納されるデータは自然順序付けによってソートされている。順序付けのないものにはComparableを実装するか、Comparatorを渡して順序付ける。

  2. NavigableMapとTreeMap

    TreeMapはNavigableMapを実装したものである。TreeMapに格納されるデータは自然順序付けによってソートされている。順序付けのないものにはComparableを実装するか、Comparatorを渡して順序付ける。

  3. ジェネリックス

    以下のコードはすべてコンパイルはできる。

    ArrayList a1 = new ArrayList();
    ArrayList a2 = new ArrayList();
    ArrayList a3 = new ArrayList();
    ArrayList a4 = new ArrayList();
    

    a1は古い書き方、リストに入れるときの型に注意が必要。a2は現在のJavaの書き方。安全。a3は型が定まらないので、String str = (String)a3.get(0);のようなキャストが必要になる。getで戻す型はObjectである。a4はStringとそのサブクラスしか入れられない。

    関数の引数にリストを渡す場合、int method(List list){ ... }のような書き方がある。

    class Super{ ... }
    class Sub extends Super { ... }

    に対して、以下のようにすると、a1にはSuper、Subのどちらのオブジェクトも格納できる。

    ArrayList<super> a1 = new ArrayList<super>;
    Super[] a1 = new Sub[10]; // エラーにならない
    ArrayList<super> a1 = new ArrayList<sub>(); // エラーになる
    // Superかそのサブクラスのコレクションを参照する変数
    // 要素の追加ができない
    ArrayList<? extends Super> a2 = new AraryList<sub>(); // OK
    // Subかそのスーパークラスのコレクションを参照する変数
    // 要素の追加はできる
    ArrayList<? super Sub> a3 = new ArrayList<super>(); // OK
    

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計