Javaのコレクションフレームワークとは、データを効率的に管理・操作するためのクラスとインターフェースの集合です。Javaの標準ライブラリの一部で、私たちが複数のデータを扱う際に非常に便利で頻繫に利用されます。
コレクションフレームワークはデータを効率的に管理するために設計されており、これはたくさんのデータを1つにまとめて整理し操作する際に役立ちます。例えば、買い物リストや学生名簿、電話帳などを管理する際に非常に役立つもので、これを知らないとJavaのコーディングの幅が非常に狭まってしまうでしょう。
(というと難しく聞こえますが、実態は「インターフェース」と「クラス」です・・・!なので、クラスとインターフェースが何者か?を知っていれば難しくはありません。)
参考 Javaのクラスとは? / Javaのインターフェースとは?
このページでは、Javaのコレクションフレームワークの使い方のそのコツを5分で1からわかりやすく初心者向けに解説します。
関連 Javaの1stステップ:基本的な構文ルールを1分で復習!
コレクションフレームワークとは?
Javaのコレクションフレームワークをすごくざっくり平易な言葉で説明すると「たくさんのデータをまとめて整理して管理するための便利な箱や引き出しのセット」だと言えます。これを使うことで、データを追加したり、取り出したり、探したりするのがとても簡単になるという優れもの。買い物リストや電話帳を作るのに役立つ道具だと思ってください。
で、大事なことは、結局のところコレクションフレームワークというのは、Javaが提供する出来合いのクラスの集合であるということ。
難しく考える必要はなくて、標準で提供されているクラスであること。そのクラスを使えば様々なデータの処理を簡単に行えるよ!ということを覚えておけばひとまずOKです。
コレクションフレームワークはJava標準で用意されているため、特別な設定なしにすぐに利用することができるのも大きなメリットの1つ。早速、それらのクラスの使い方を見ていきましょう。
List
データを順序付けて管理できる「List」というインターフェースから説明していきます。このインターフェースを実装したクラスを使うことで、データの追加や削除、取得を簡単に行うことができるようになります。
Listはインターフェースなので、我々がコーディングする際には、このインターフェースを実装したクラス(ArrayListやLinkedList)を利用します。これらのクラスは、Listインターフェースが定義したメソッドを具体的に実現しています。
ArrayListの使い方
まず、ArrayListクラスを使ってリストを作成します。ArrayListはリストの実装クラスの1つで、配列を使ってデータを管理します。
参考 Javaの「配列」とは?
import java.util.ArrayList; public class Main { public static void main(String[] args) { // ArrayListの作成(リストは順序を持つ) ArrayList<String> list = new ArrayList<>(); // 要素の追加 list.add("Apple"); list.add("Banana"); list.add("Cherry"); // 要素の取得(インデックスを使う) System.out.println(list.get(1)); // 出力: Banana // 要素の削除 list.remove("Apple"); // 要素の数 System.out.println(list.size()); // 出力: 2 // 全要素の出力 for (String fruit : list) { System.out.println(fruit); } // 出力: // Banana // Cherry } }
ポイント ArrayListの主なメソッドとその使い方
メソッド名 | 意味 | 使用例 |
---|---|---|
add(E e) | 要素をリストの末尾に追加する | list.add("Apple"); |
add(int index, E e) | 指定した位置に要素を挿入する | list.add(1, "Banana"); |
get(int index) | 指定した位置の要素を取得する | String fruit = list.get(0); |
set(int index, E e) | 指定した位置の要素を新しい要素に置き換える | list.set(1, "Cherry"); |
remove(int index) | 指定した位置の要素を削除する | list.remove(0); |
remove(Object o) | 指定した要素をリストから削除する | list.remove("Apple"); |
size() | リストの要素数を取得する | int size = list.size(); |
isEmpty() | リストが空かどうかを判定する | boolean empty = list.isEmpty(); |
contains(Object o) | リストに指定した要素が含まれているかを判定する | boolean contains = list.contains("Apple"); |
clear() | リストの全要素を削除する | list.clear(); |
indexOf(Object o) | 指定した要素の最初の出現位置を返す | int index = list.indexOf("Apple"); |
lastIndexOf(Object o) | 指定した要素の最後の出現位置を返す | int lastIndex = list.lastIndexOf("Apple"); |
toArray() | リストの全要素を配列に変換する | Object[] array = list.toArray(); |
toArray(T[] a) | 指定した配列にリストの全要素を格納する | String[] array = list.toArray(new String[0]); |
注意しておきたいのが以下の部分。
// ArrayListの作成(リストは順序を持つ) ArrayList<String> list = new ArrayList<>();
ここでの<>
は「ダイヤモンド演算子」と呼ばれ、Javaのジェネリクスという機能を使っています。ジェネリクスというのはリストが特定のデータ型(この場合はString)のみを扱うということを指定するもので、必須ではありません。
が、ArrayListを利用する際には一般的に指定するものなので、そういうものだと覚えておきましょう。
- Listインターフェース
- リストとしての基本的な操作を定義する設計図
- ArrayListクラス
- Listインターフェースを実装した具体的なクラス。データを配列で管理する。
- ジェネリクス
- リストの要素の型を指定するための機能。
ArrayList<String>
は文字列のみを扱うリストを意味する。
- リストの要素の型を指定するための機能。
Set
Setは、重複しない要素の集まりを管理するためのコレクション。要素の順序は保証されません。Listと異なり、同じ要素を複数回追加することはできず、重複を許さないため要素が一意であることを保証する場合に便利です。
Setインターフェースを実装するクラスには、HashSet、LinkedHashSet、TreeSetなどがありますが、ここでは最も一般的に使用されるHashSetを例に説明します。
HashSetの使い方
HashSetクラスを使ってセットを作成します。HashSetはハッシュテーブルを使って要素を管理するため、要素の追加、削除、検索が高速です。
import java.util.HashSet; public class Main { public static void main(String[] args) { // HashSetの作成 HashSet<String> set = new HashSet<>(); // 要素の追加 set.add("Apple"); set.add("Banana"); set.add("Cherry"); // 重複する要素は追加されない set.add("Apple"); // 要素の数 System.out.println(set.size()); // 出力: 3 // 要素が含まれているかを判定 System.out.println(set.contains("Banana")); // 出力: true // 要素の削除 set.remove("Cherry"); // 全要素の出力 for (String fruit : set) { System.out.println(fruit); } // 出力: // Apple // Banana // 全要素の削除 set.clear(); System.out.println(set.size()); // 出力: 0 } }
ポイント HashSetの主なメソッドとその使い方・意味
メソッド名 | 意味 | 使用例 |
---|---|---|
add(E e) | 要素をセットに追加する | set.add("Apple"); |
remove(Object o) | 指定した要素をセットから削除する | set.remove("Apple"); |
size() | セットの要素数を取得する | int size = set.size(); |
isEmpty() | セットが空かどうかを判定する | boolean empty = set.isEmpty(); |
contains(Object o) | セットに指定した要素が含まれているかを判定する | boolean contains = set.contains("Apple"); |
clear() | セットの全要素を削除する | set.clear(); |
toArray() | セットの全要素を配列に変換する | Object[] array = set.toArray(); |
toArray(T[] a) | 指定した配列にセットの全要素を格納する | String[] array = set.toArray(new String[0]); |
iterator() | セットの要素を繰り返し処理するためのイテレータを取得する | Iterator<String> it = set.iterator(); |
- Setインターフェース
- 重複しない要素の集まりを管理するための基本的な操作を定義する設計図
- HashSetクラス
- Setインターフェースを実装した具体的なクラス。ハッシュテーブルを使って要素を管理するため、高速な操作が可能
- 重複しない要素
- Setは重複しない要素のみを扱うため、データが一意であることを保証したい場合に便利
Map
Mapは、キーと値のペアでデータを管理するためのコレクション。キーは一意で、同じキーに対して複数の値を持つことはできません。Mapを使用することで、キーを使って迅速に対応する値を取得することができます。Mapインターフェースを実装するクラスには、HashMap、TreeMap、LinkedHashMapなどがありますが、ここでも一般的に使用されるHashMapを例に説明します。
HashMapの使い方
import java.util.HashMap; public class Main { public static void main(String[] args) { // HashMapの作成 HashMap<String, Integer> map = new HashMap<>(); // 要素の追加 map.put("Apple", 100); map.put("Banana", 150); map.put("Cherry", 200); // 要素の取得 System.out.println(map.get("Banana")); // 出力: 150 // 要素の更新 map.put("Banana", 180); System.out.println(map.get("Banana")); // 出力: 180 // 要素の削除 map.remove("Apple"); // 要素の数 System.out.println(map.size()); // 出力: 2 // 要素が含まれているかを判定 System.out.println(map.containsKey("Cherry")); // 出力: true // 全要素の出力 for (String key : map.keySet()) { System.out.println(key + ": " + map.get(key)); } // 出力: // Banana: 180 // Cherry: 200 // 全要素の削除 map.clear(); System.out.println(map.size()); // 出力: 0 } }
ポイント HashMapの主なメソッドとその使い方・意味
メソッド名 | 意味 | 使用例 |
---|---|---|
put(K key, V value) | キーと値のペアをマップに追加する | map.put("Apple", 100); |
get(Object key) | 指定したキーに対応する値を取得する | int value = map.get("Apple"); |
remove(Object key) | 指定したキーとその値をマップから削除する | map.remove("Apple"); |
size() | マップの要素数を取得する | int size = map.size(); |
isEmpty() | マップが空かどうかを判定する | boolean empty = map.isEmpty(); |
containsKey(Object key) | 指定したキーがマップに含まれているかを判定する | boolean contains = map.containsKey("Apple"); |
containsValue(Object value) | 指定した値がマップに含まれているかを判定する | boolean contains = map.containsValue(100); |
clear() | マップの全要素を削除する | map.clear(); |
keySet() | マップ内の全てのキーをセットとして返す | Set<String> keys = map.keySet(); |
values() | マップ内の全ての値をコレクションとして返す | Collection<Integer> values = map.values(); |
entrySet() | マップ内の全てのキーと値のペアをセットとして返す | Set<Map.Entry<String, Integer>> entries = map.entrySet(); |
- Mapインターフェース
- キーと値のペアを管理するための基本的な操作を定義する設計図
- HashMapクラス
- Mapインターフェースを実装した具体的なクラス。ハッシュテーブルを使ってキーと値を管理するため、高速な操作が可能
- キーと値のペア
- Mapはキーと値のペアを管理し、キーを使って迅速に値を取得することができる