Javaコレクション – エンジニアの入り口 https://eng-entrance.com 「エンジニアの入り口」は、プログラミング入門やエンジニアリング入門の知識が満載の初心者のための勉強サイトです。プログラミングやサーバ、ネットワークの基礎知識や勉強方法を習得できます。 Wed, 28 Jun 2017 23:55:21 +0000 ja hourly 1 https://wordpress.org/?v=5.2.19 【2分でわかる!】Javaのコレクションとは? https://eng-entrance.com/java-collection https://eng-entrance.com/java-collection#comments Wed, 28 Jun 2017 23:54:37 +0000 https://eng-entrance.com/?p=5970 コレクションとは要素を集めたオブジェクトだ。それほど難しい概念ではない。

このページではコレクションについて簡単にご説明していこう。

コレクションとは?

コレクションとは、たくさんの要素をひとつのユニットに集めた単なるオブジェクトだ。入れ物を表すコンテナと呼ばれることもある。

コレクションは集められたデータを保存し、検索し、処理し、問い合わせに応える。

よく知られているものとして、メールフォルダー(メールが集められたもの)、電話帳(名前に対する電話番号の紐付け)といった普通によくあるグループを表現している。

メールのコレクション

コレクション(Collection)・インターフェース

Javaではコレクションを扱うためにコレクション(Collection)・インターフェースが定義されている。

コレクション・インターフェースは、枝分かれしたインターフェースの階層構造のルーツにある。

コレクションには、要素の重複を許すコレクションもあれば、許さないものもあったりする。また、順序が付けられたものもあれば、そうでないものもある。

このコレクションの特徴ごとにサブインターフェースが定義されている。次の図は、ルーツにあたるCollectionから枝分かれした主要なサブインターフェースを示している。

ちなみに、Mapもコレクションに似ているがコレクションではない。

collection

JDKは、コレクション・インターフェースを直接実装したクラス提供していない。

そうではなく、SetやListのようなより具体的なサブインターフェースの実装を供給している。

このインターフェースは最も汎用化が必要とされるところで、コレクションを回覧したり操作したりするために使われる。実際のインターフェースの実装は,SetやListなどのサブインターフェースを使って行われている。

以下に,そのサブインターフェースの特徴を示す。

  • Set:重複した要素を含むことができないコレクションだ。数学的な集合の概念モデルを作ったり、生徒の時間割を作るためのコースや機械で動くプロセスの集合を表現したりする。
  • List:順序付けられたコレクションである。重複した要素を含むことができる。ユーザーは要素を挿入する場所やインデックスによって要素にアクセスすることを正確に制御できる。
  • Queue:追加の挿入、抽出、および検査が追加されたコレクション。

処理する前の複数の要素を保持するために使われる。基本的なCollectionオペレーションに加えて,追加の挿入や抽出や検査のオペレーションを供給する。

  • Deque:Queueと同じ機能を持つ。加えて,FIFO(先入先出)やLIFO(後入先出)の両方のために使われる。
  • Map:キーと値を紐付け(マップ)したオブジェクトである。重複したキーを含まない。各々のキーは多くてもひとつの値に紐付けられている。

下記なども参考に。

Set, List, Queue, Dequeへ要素を追加する

このプログラムは、Setインターフェースを実装したHashedSetであれ、他の3つのインターフェース(List, Queue, Deque)であれ、それらのルーツであるCollectionインターフェースを介してaddメソッドで要素が追加されることを示している。

これは、Collectionインターフェースがそれらのルーツにあって最も汎用的だということを示している。

import java.util.*;

public class RootOfCollection {
    public static void main(String[] args) {
        Set<String> hashSet = new HashSet<String>();//[1]
        List<String> arrayList = new ArrayList<String>();//[2]
        Queue<String> priorityQueue = new PriorityQueue<String>();//[3]
        Deque<String> arrayDeque = new ArrayDeque<String>();//[4]
        add(hashSet);//[5]
        add(arrayList);//[6]
        add(priorityQueue);//[7]
        add(arrayDeque);//[8]
        for (String string : hashSet) {//[9]
            System.out.println("[10]" + (String) string);
        }
        for (String string : arrayList) {//[11]
            System.out.println("[12]" + (String) string);
        }
        for (String string : priorityQueue) {//[13]
            System.out.println("[14]" + (String) string);
        }
        for (String string : arrayDeque) {//[15]
            System.out.println("[16]" + (String) string);
        }
    }
    private static void add(Collection collection) {//[20]
        collection.add("ABC");//[21]
    }
}

実行結果

[11]ABC
[13]ABC
[15]ABC
[17]ABC

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] Setを実装したHashSetクラスのオブジェクトhashSetを作る。
  • [2] Listを実装したArrayListクラスのオブジェクトarrayListを作る。
  • [3] Queueを実装したPriorityQueueクラスのオブジェクトpriorityQueueを作る。
  • [4] Dequeを実装したArrayDequeクラスのオブジェクトarrayDequeを作る。
  • [5] hashSetを引数としてaddメソッドを呼び出す。
  • [6] arrayListを引数としてaddメソッドを呼び出す。
  • [7] priorityQueueを引数としてaddメソッドを呼び出す。
  • [8] hashSetを引数としてaddメソッドを呼び出す。
  • [9]-[10] hashSetの要素をすべて表示する。
  • [11]-[12] arrayListの要素をすべて表示する。
  • [13]-[14] priorityQueueの要素をすべて表示する。
  • [15]-[16] arrayDequeの要素をすべて表示する。
  • [20] addメソッドを定義する。
  • [21] Collectionインターフェースを介して要素「ABC」を追加する。

まとめ

このページではJavaのコレクションについてお伝えしてきた。データの集まりで配列進化系とまずは理解しておくとイメージはしやすいのではないだろうか?

正確なところはこのページを読んでいただければ幸いだ。

]]>
https://eng-entrance.com/java-collection/feed 1