クラスライブラリ基礎

コレクション概論・リスト

コレクションを用いたプログラミングの概論を学びます。

アルゴリズム+データ構造=プログラム

プログラムにおける重要な要素として「アルゴリズム」と「データ構造」があります。 アルゴリズムとは、ある問題を解くための手順のことです。 プログラミング言語では、条件分岐、繰り返しなどを組み合わせながら、 アルゴリズムを記述します。(ここでは手続き型言語を想定しています)

では、データ構造とは何でしょうか。 プログラムは何らかのデータに対して処理を行いますので、 それらデータを何らかの形式でメモリ等に記憶しておく必要があります。 その形式のことを、データ構造と呼びます。 最も単純なデータ構造は配列でしょう。 代表的なデータ構造としては、リスト、木、グラフなどがあります。

コレクションとは

コレクションは、データ構造の基本である、複数のデータのグループを扱う構造です。 Java では Collections Framework という枠組みで、セット(集合)、リスト(ベクトル)、 マップといった構造を表現するクラスおよびインタフェースが用意されています。

Java Collections Framework の全体像

Java の Collections Framework では、4つの主なインタフェースが用意されています。 -> 「プログラミングレッスン(下)」 pp.282-285

このうち Queue は List の一形態であるので、実質 3つということになります。 Queue は後期の「クラスライブラリ応用」で扱います。

リスト

要素が並んでいて、その順序が保持されているデータ構造をリストといいます。 リストは配列と異なり、長さが可変です。要素を追加していくと自動的に長くなるため、 あらかじめ要素数がわかっていない場合に非常に便利です。

Java ではリストを表す主要なクラスとして、 ArrayList, LinkedList の2種類があります。 どちらも java.util パッケージに属するクラスなので、通常 import をします。

import java.util.*;

配列や他のクラスと同様、new でインスタンスを生成します。 new でインスタンスを生成した直後は、まだ中身の要素が1つもない、空の状態です。

    // 要素が String である ArrayList
    ArrayList<String> list1 = new ArrayList<String>();

    // 要素が String である LinkedList
    LinkedList<String> list2 = new LinkedList<String>();

要素の参照、追加、削除、要素数の取得などの操作はすべてメソッドを用いて行います。

ArrayList

-> 「プログラミングレッスン(下)」pp.263-270

ArrayList は、配列(array)のような内部構造を持ったリストです。

ArrayList の使い方は「オブジェクト指向プログラミング」 2週目の後半にも出てきました。 思い出しましょう。

Iterator と 拡張for

-> 「プログラミングレッスン(下)」pp.271-275

オートボクシング

->「プログラミングレッスン(下)」pp.278-280

削除

->「プログラミングレッスン(下)」pp.280-281

LinkedList

LinkedList はその名の通り、連結リストを内部構造に持つリストです。 連結リストとは、リストの要素 1つ1つがオブジェクトとなっていて、 オブジェクト間のつながりは参照関係(has-a の関係)によって実現されています。

LinkedList の場合には双方向リストになっていて、 着目している要素の1つ後ろの要素や1つ前の要素が容易に取得できます。

->「プログラミングレッスン(下)」pp.288-295

なお、古いプログラムでは Vector というクラスもよく登場しますが、 これは ArrayList と同様のものと考えてください。