ダウンロード サンプルファイル (44.1 KB)
Collections Framework
Collections Framework(コレクション・フレームワーク)とは、コレクションを統一的に操作および管理するための仕組みで、汎用的なインターフェースと、その実装クラスなどから構成されています。
Collections Frameworkで提供されるインターフェースのうち、Collection、List、Set、Queue、Mapの5つが基本となるインターフェースです。次の図は、Collections Frameworkに含まれる主要なインターフェースの階層構造を示しています。
Collectionインターフェース
Collectionは、コレクション操作の基本メソッドが定義されたインターフェースです。Map以外のList、Set、Queueインターフェースは、このCollectionのサブインターフェースとなっています。
次の表は、コレクションの要素に対する処理と、基本のコレクションインターフェースのメソッドとの対応をまとめたものです。
| 要素の主な処理 | Collection | List | Set | Queue | Map |
| 追加 | add | ← | ← | add offer | put |
| インデックスを指定して設定 | set | ||||
| 検索 | contains | ← | ← | ← |
containsKey containsValue |
| indexOf | |||||
| 取得 | get | peek | get values | ||
| キーの取得 | KeySet | ||||
| 要素が空か判定 | isEmpty | ← | ← | ← | isEmpty |
| イテレーター取得 | iterator | ← | ← | ← | |
| 削除 | remove | ← | ← | ← | remove |
| poll | |||||
| 要素数 | size | ← | ← | ← | size |
| 配列にコピー | toArray | ← | ← | ← |
List、Set、Map、Queueインターフェース
これらのインターフェースは、それぞれオブジェクトの管理方法が異なったコレクションとなっています。
1. List(リスト)
リストは、配列のように格納される要素に順番のあるコレクションです。順番があるため、インデックスで要素を参照したり、追加したりすることができます。
2. Set(セット)
Setは、格納される要素に重複が許されないコレクションです。また、リストのような順番はなく、要素は順不同に格納されます。
3. Queue
Queue(キュー)は、窓口に人が並ぶような待ち行列を表したコレクションです。格納した要素を、古いものから順に取り出す処理に用います。
4. Map
Map(マップ)は、要素を、一意のキーと値(オブジェクト)のペアで管理するコレクションです。要素を追加するには、オブジェクトとそれに対応したキーを登録し、要素を操作するには、このキーを用います。
コレクションの実装クラス
Collections Frameworkには、これらのインターフェースを実装した、さまざなクラスが提供されています。次の表は、それぞれのインターフェースの主な実装クラスをまとめたものです。
| インターフェース | 主な実装クラス | 概要・特徴 |
| List | ArrayList | 可変長配列クラス |
| LinkedList | リンク構造のリストクラス。ArrayListに比べて、任意の位置の追加が高速にできる | |
| Vector | 可変長配列クラス | |
| Set | HashSet | 任意の順序で格納する |
| LinkedHashSet | 格納順序の保障がある | |
| TreeSet | 要素がキーによって自動的にソートされる | |
| Queue | LinkedList | リンク構造のリストクラス。上記LinkedListと同じ |
| PriorityQueue | 優先順位つきキュークラス | |
| ArrayDeque | 両端キュークラス | |
| Map | HashMap | 基本的なMapクラス |
| LinkedHashMap | 格納順序の保障がある | |
| TreeMap | 要素がキーによって自動的にソートされる | |
| Hashtable | キー、値ともnullは禁止 |
ArrayListクラス
ここでは、さまざな実装クラスのなかでも、もっとも基本的なArrayListクラスを見ていきましょう。名前にArrayがついているように、ArrayListクラスは、配列を拡張したような構造になっています。
ArrayListを使うには、はじめにArraListクラスをインスタンス化します。通常は、次のように引数のないコンストラクタを使います。またジェネリックスに対応していますので、同時に要素の型も指定します。
// Integerクラスを指定 ArrayList<Integer> array = new ArrayList<Integer>(); // Stringクラスを指定 ArrayList<String> array = new ArrayList<String>();
ArrayListに要素を追加するにはaddメソッド、要素をとりだすには、getメソッドを使います。getメソッドの引数は、配列と同様0から始まるインデックスです。
ArrayList<String> array = new ArrayList<String>();
array.add("ドル");
array.add("ポンド");
array.add("フラン");
String name = array.get(1); // ポンド
ArrayListクラスのその他の主なメソッドは、前述の表「インターフェースの各メソッド」のとおりです。
Iteratorインターフェース
コレクションを操作するインターフェースとして、Iterator(イテレータ、反復子)インターフェースというものが提供されています。イテレータとは、コレクションの要素を、1つずつ順番に処理するための仕組みで、さまざなコレクションに対して同じメソッドで操作することができます。なお、イテレータが使用できるクラスは、Iterableインターフェースを実装したものだけです。
ちなみに拡張for文は、Iteratorを使ったループ処理を簡略した書き方で、内部的にIteratorが使われています。
この記事は参考になりましたか?
- Android開発のためのJava SE再入門連載記事一覧
-
- Androidにおける日付処理の基本
- ストリームでの入出力処理の基本
- コレクションとAndroid非同期処理の基本
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 高江 賢(タカエ ケン)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
