コンテンツにスキップ

コレクションフレームワーク 第1回 Collectionとは

プログラムを書いていると、多数のデータを扱う機会が多々あります。その場合に、全てデータ構造を自分で用意してもプログラムすることができますが、Javaにはもともとそのデータ構造を表現できるクラス群が用意されています。
これらのクラスはコレクションフレームワークと呼ばれ、うまく使用することによってプログラムを簡単に書くことができます。

コレクションフレームワークに含まれるクラス/インターフェースは次のようなものがあります。

クラス/インターフェース意味
java.util.List順序付きリストのインターフェース
java.util.ArrayList配列を用いたjava.util.Listの実装
java.util.LinkedListリンクリストを用いたjava.util.Listの実装
java.util.Set重複を許さない集合のインターフェース
java.util.HashSetハッシュを用いたjava.util.Setの実装
java.util.TreeSet二分探索木を用いたjava.util.Setの実装

また、コレクションに深い関わりのあるMapというデータ構造があります。
このデータ構造は、キーのペアを表現するためのもので、辞書のようなものです。
辞書は単語をキーにして意味や用例などのを取得することができます。

クラス/インターフェース意味
java.util.Mapキーと値のペアを表す構造のインターフェース
java.util.HashMapキーの検索にハッシュを用いたjava.util.Mapの実装
java.util.TreeMapキーの検索に二分探索木を用いたjava.util.Mapの実装

これらのクラスやインターフェースはJavaで元々用意されているもので、機能に不満があれば自分で機能を追加したクラスを作成することもできます。
しかし、ここに挙げたもので事足りるのであれば、わざわざ再開発しないで安全で高速なこれらのクラスを使用することをお勧めします。

java.util.Collectionはインターフェースです。
よって、そのままインスタンスを生成することができません。

import java.util.Collection;
public class C0S1 {
public static void main(String[] args) {
Collection c = new Collection();
}
}
Terminal window
> javac C0S1.java
C0S1.java:5: java.util.Collection abstract です。インスタンスを生成することはできません。
Collection c = new Collection();
^
エラー 1

そのため、Collectionインターフェースを実装するクラスを使用する必要があります。

import java.util.Collection;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.HashSet;
import java.util.TreeSet;
public class C0S2 {
public static void main(String[] args) {
Collection c1 = new ArrayList();
Collection c2 = new LinkedList();
Collection c3 = new HashSet();
Collection c4 = new TreeSet();
System.out.println("c1 = " + c1.getClass());
System.out.println("c2 = " + c2.getClass());
System.out.println("c3 = " + c3.getClass());
System.out.println("c4 = " + c4.getClass());
}
}
Terminal window
> javac C0S2.java
> java C0S2
c1 = class java.util.ArrayList
c2 = class java.util.LinkedList
c3 = class java.util.HashSet
c4 = class java.util.TreeSet

注意すべき点は、java.util.Mapはコレクションを実装しません。

java.util.Collectionが持つメソッドのうち、特に使用されると思われるものを抜粋します。

コレクションにオブジェクトを追加する

import java.util.Collection;
import java.util.ArrayList;
public class C1S1 {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("hoge");
c.add("foo");
c.add("bar");
System.out.println(c.toString());
}
}
Terminal window
> java C1S1
[hoge, foo, bar]

コレクションからオブジェクトを削除する

import java.util.Collection;
import java.util.ArrayList;
public class C1S2 {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("hoge");
c.add("foo");
c.add("bar");
c.remove("foo");
System.out.println(c.toString());
}
}
Terminal window
> java C1S2
[hoge, bar]

コレクションに対象のオブジェクトが含まれているか検査する

import java.util.Collection;
import java.util.ArrayList;
public class C1S3 {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("hoge");
c.add("foo");
System.out.println(c + " contains \"foo\" ? > " + c.contains("foo"));
System.out.println(c + " contains \"bar\" ? > " + c.contains("bar"));
}
}
Terminal window
> java C1S3
[hoge, foo] contains "foo" ? > true
[hoge, foo] contains "bar" ? > false

コレクションに格納されているオブジェクトの個数を取得する。

import java.util.Collection;
import java.util.ArrayList;
public class C1S4 {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("hoge");
c.add("foo");
c.add("bar");
System.out.println(c.size());
}
}
Terminal window
> java C1S4
3

コレクションが空かどうか検査する。

import java.util.Collection;
import java.util.ArrayList;
public class C1S5 {
public static void main(String[] args) {
Collection c = new ArrayList();
System.out.println(c + " is Empty ? > " + c.isEmpty());
c.add("hoge");
c.add("foo");
c.add("bar");
System.out.println(c + " is Empty ? > " + c.isEmpty());
}
}
Terminal window
> java C1S5
[] is Empty ? > true
[hoge, foo, bar] is Empty ? > false