コレクション(リスト、セット、マップ、デック)

[戻る] [前に] [次に]

目次

コレクション(リスト、セット、マップ、デック)

コレクション(リストセットマップデック)は、オブジェクトの集合を扱うための仕組みです。

カテゴリクラス説明
List系ArrayList配列を扱います。
LinkedList配列を扱います。挿入・削除が高速です。
Vector配列を扱います。パフォーマンスが悪いため現在ではあまり推奨されない古いクラスです。
Set系HashSet値の重複を許さない順不同の要素集合を扱います。
TreeSet値の重複を許さないソートされた要素集合を扱います。
Map系HashMapキーと値の組からなる要素の集合を扱います。
LinkedHashMapキーと値の組からなる要素の集合を扱います。設定順序が保証されます。。
TreeMapキーと値の組からなる要素の集合を扱います。キーでソートされています。
Queue系Dequeキューやスタックを扱います。

アレイリスト(ArrayList)

ArrayList は配列を扱う一般的なクラスです。ArrayList<String> は String 型のデータを要素として持つ ArrayList であることを示しています。

import java.util.*;

class Main {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();
        list.add("AAA");
        list.add("BBB");
        list.add("CCC");
        for (String s : list) {
            System.out.println(s);
        }
    }
}

Java 7 以降では右辺の型を省略することができるようになりました。<> はダイヤモンド演算子と呼ばれます。

ArrayList<String> list = new ArrayList<String>();   // Java 6
ArrayList<String> list = new ArrayList<>();         // Java 7

下記などのメソッドが用意されています。

コレクションをループ処理するには下記などの方法がありますが、後者の方が推奨されています。

// for-i ループで回す例
for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}

// for-each ループで回す例
for (String s : list) {
    System.out.println(s);
}

リンクドリスト(LinkedList)

LinkedListArrayList と同じように使用することができます。挿入や削除を頻繁に行う場合は ArrayList よりも LinkedList の方が高速です。ただし、get() による参照は ArrayList の方が高速です。

import java.util.*;

class Main {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<>();
        list.add("AAA");
        list.add("BBB");
        list.add("CCC");
        for (String s : list) {
            System.out.println(s);
        }
    }
}

ベクトル(Vector)

Vector クラスも ArrayListLinkedList と同じように扱うことができますが、同期をとるためパフォーマンスが悪く、現在ではあまり使用されていません。同期が必要な場合は ArrayList と java.util.Collections.synchronizedList() を組み合わせた方がよいそうです。

ハッシュセット(HashSet)

HashSet も配列の様に扱いますが、要素の重複が許されない、順序の保障が無い点が ArrayListLinkedList と異なります。

import java.util.*;

class Main {
    public static void main(String[] args) {
        HashSet<String> hash = new HashSet<>();
        hash.add("AAA");
        hash.add("BBB");
        hash.add("CCC");
        for (String s : hash) {
            System.out.println(s);
        }
    }
}

下記などのメソッドが用意されています。

ツリーセット(TreeSet)

TreeSetHashSet と同じように使用できます。要素が自動的にソートされる点が HashSet と異なります。

import java.util.*;

class Main {
    public static void main(String[] args) {
        TreeSet<String> tree = new TreeSet<>();
        tree.add("AAA");
        tree.add("BBB");
        tree.add("CCC");
        System.out.println(tree);
        for (String s : tree) {
            System.out.println(s);
        }
    }
}

ハッシュマップ(HashMap)

HashMap は、キー(key)と値(value)の組み合わせを要素として持つ配列です。HashMap<String, Integer> はキーが String、値が Integer 型であることを示します。要素の追加には .put() を用います。キー名が重複する場合は上書きされます。順序は保証されません。

import java.util.*;

class Main {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<>();
        map.put("Yamada", 87);
        map.put("Tanaka", 92);
        map.put("Suzuki", 76);
        map.forEach((key, value) -> {
            System.out.println(key + ": " + value);
        });
    }
}

下記などのメソッドが用意されています。

リンクドハッシュマップ(LinkedHashMap)

LinkedHashMapHashMap と同じように使用することができますが、値を設定した順番が保証される点が異なります。

import java.util.*;

class Main {
    public static void main(String[] args) {
        LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
        map.put("Yamada", 87);
        map.put("Tanaka", 92);
        map.put("Suzuki", 76);
        map.forEach((key, value) -> {
            System.out.println(key + ": " + value);
        });
    }
}

ツリーマップ(TreeMap)

TreeMapHashMap と同じように使用できます。要素がキーによって自動的にソートされる点が HashMap と異なります。

import java.util.*;

class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> map = new TreeMap<>();
        map.put("Yamada", 87);
        map.put("Tanaka", 92);
        map.put("Suzuki", 76);
        map.forEach((key, value) -> {
            System.out.println(key + ": " + value);
        });
    }
}

デック(Deque)

Deque は double ended queue の略で、FIFO(First In First Out) のキューや、FILO(First In Last Out)のスタック両方の目的に使用できます。

import java.util.*;

class Main {
    public static void main(String[] args) {
        Deque<String> queue = new ArrayDeque<>();
        queue.addLast("AAA");
        queue.addLast("BBB");
        queue.addLast("CCC");
        while (queue.size() > 0) {
            System.out.println(queue.pollFirst());
        }
    }
}

下記などのメソッドが用意されています。


http://www.tohoho-web.com/java/collection.htm
初版:2004年11月28日、最終更新:2024年5月5日
[戻る] [前に] [次に]