Java Gold合格へ向けて
コレクションとは複数の参照型の値を扱えるようにした機能のことを指す。イメージとしては参照型の配列が近い……が、もっと様々な機能が追加されているため配列と同じ感覚でいると間違えてしまう。
- コレクション…変数に複数の値を保存するための機能
- リスト…コレクションの1つ。要素の順序を番号で管理する
- セット…コレクションの1つ。同じ要素が複数登録されないように管理する
- マップ…コレクションの1つ。要素をキーと呼ばれる情報で管理する
コレクションの宣言は下記の通り。ジェネリクスを使って要素の型名は指定してある。ちなみに要素は保存した1つ1つのデータのことを指す。
コレクションの型名<要素の型名> 変数名 = new コレクションの型<要素の型名>();
ジェネリクス実装してみる
リスト、セット、マップの3種類でInteger型の複数データを取り扱えるようにして、色々と動かしてみることとする。
リスト
ArrayListには様々なメソッドが用意されているが、とりあえずaddメソッドを使って要素を追加していくのが基本的な使い方となる。ただの配列とは違い、途中に要素を挿入することができるのが大きな違いだろう。 実行コード
public class Main { public static void main(String[] arg){ ArrayList<Integer> testList = new ArrayList<>(); System.out.println(testList); testList.add(1); testList.add(2); System.out.println(testList); testList.add(0, 4); // 先頭に挿入 System.out.println(testList); System.out.println(testList.get(0)); // 先頭の要素のみ取得 testList.set(0,0); // 先頭の値を変更 System.out.println(testList.get(0)); // 先頭の要素のみ取得 testList.clear(); System.out.println(testList); } }
実行結果
[ ]
[1, 2]
[4, 1, 2]
4
0
[ ]
セット
HashSetにはArrayListと同様に、addメソッドで値を追加することができるが、同じ値を入れることはできない。下記実行コードでは「1」を2回入れているが、表示した中身には1が一個しか入っていない。また、containsメソッドを使うことで値が含まれているかどうかの確認を行うことができる。 実行コード
ppublic class Main { public static void main(String[] arg){ HashSet<Integer> testSet = new HashSet<>(); System.out.println(testSet); testSet.add(1); testSet.add(2); System.out.println(testSet); testSet.add(1); testSet.add(3); System.out.println(testSet); if (testSet.contains(1)) System.out.println("1が含まれている"); testSet.clear(); System.out.println(testSet); } }
実行結果
[ ]
[1, 2]
[1, 2, 3]
1が含まれている
[ ]
マップ
HashMapはこれまでのリストやマップとはデータが異なる。キーとそれに紐づく値を設定する必要があり、その際にはputを利用する。値の取得はキーを指定してgetを使う。 実行コード
public class Main { public static void main(String[] arg){ HashMap<String, Integer> testMap = new HashMap<>(); System.out.println(testMap); testMap.put("数学", 100); testMap.put("国語", 60); System.out.println(testMap); testMap.put("日本史", 60); testMap.put("世界史", 10); System.out.println(testMap); testMap.put("世界史", 30); System.out.println("世界史="+testMap.get("世界史")); testMap.remove("世界史"); System.out.println(testMap); } }
実行結果
{}
{数学=100, 国語=60}
{日本史=60, 数学=100, 国語=60, 世界史=10}
世界史=30
{日本史=60, 数学=100, 国語=60}
まとめ
基本型の配列の感覚で勉強すると困惑する内容だと思う。オブジェクト指向として配列などのデータ型を使いたいという時に使うことになるのだと理解した。リスト、セット、マップの3種類があるのだが、マップの特異性は注意して覚えておこうと思う。