はじめに
Javaを使って開発をしていると、必ずと言っていいほど登場するのが「コレクションフレームワーク」です。配列と似ているようで、もっと柔軟にデータを扱える仕組み。それが List や Set、そして Map です。
しかし、実務ではどのコレクションを使用すべきかと迷う場面が少なくありません。
今回は、List・Set・Mapの違いや特徴についてログとして記載していきたいと思います。
他にも、体系的にJavaを学びたい方には以下の教材がおすすめです:
👉スッキリわかるJava入門 
👉スッキリわかるJava入門 実践編
コレクションフレームワークとは
コレクションフレームワークとは、データをまとめて効率よく管理するための仕組みであり、Javaではインターフェースを通じて統一的に操作できる点が大きな特徴です。
主な分類
- List:順序付き・重複可の要素を取り扱うためのクラス
- Set:重複のないデータの集まりを扱うために用意されたクラス
- Map:「Map」はキーと値をペアとして扱うことができるたクラス
List
Listは 順序を保持しつつ、重複を許容するコレクション です。インデックス(番号)で要素にアクセスできるため、並びを重視する処理に向いています。
代表クラス
| コレクション名 | 内容 | 
| ArrayList | 配列ベースで高速なランダムアクセスが可能 | 
| LinkedList | 要素の追加・削除が多い場合に有効 | 
例
        ArrayList<String> list = new ArrayList<String>();
        // 値の追加
        list.add("追加1");
        list.add("追加2");
        list.add("追加3");
        // 値の取得
        System.out.println(list.get(0)); // 結果 追加1
        // 値の更新
        list.set(0, "追加4");
        // 値の取得
        System.out.println(list.get(0)); // 結果 追加4
        // 値の削除
        list.remove(0);
        System.out.println(list.get(0));// 結果 追加2
Set
Setは 要素の重複を許さないコレクション です。順序は保証されませんが、一意性を担保したい場面に適しています。
代表クラス
| メソッド名 | 詳細 | 
| HashSet | 要素に順序がなく、追加された順序とは無関係に要素を格納します。 | 
| LinkedHashSet | 要素に順序を持ったクラスで、追加された順序で要素を格納します。 | 
| TreeSet | ツリー構造を持ったクラスです。自然順序で要素が格納されます。 | 
例
    /**
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        Set<String> hashSet = new HashSet<>();
        hashSet.add("a");
        hashSet.add("c");
        hashSet.add("e");
        hashSet.add("b");
        hashSet.add("d");
        hashSet.add("a"); //重複は無視
        // 順序なし
        System.out.println(hashSet); 
        Set<String> linkedHashSet = new LinkedHashSet<>();
        linkedHashSet.add("1");
        linkedHashSet.add("3");
        linkedHashSet.add("5");
        linkedHashSet.add("2");
        linkedHashSet.add("4");
        // 格納順 1,3,5,2,4
        System.out.println(hashSet); 
        Set<String> treeSet = new TreeSet<>();
        treeSet.add("1");
        treeSet.add("3");
        treeSet.add("5");
        treeSet.add("2");
        treeSet.add("4");
        // 格納順 1,2,3,4,5
        System.out.println(hashSet); 
    }
Map
Mapは キーと値のペア を管理します。キーは一意であり、値は重複しても構いません。指定したキーに対応する値を素早く取得できるため、実務で非常によく利用されます。
代表クラス
| メソッド名 | 詳細 | 
| HashMap | 要素に順序がなく、追加された順序とは無関係に要素を格納します。 | 
| LinkedHashMap | 要素に順序を持ったクラスで、追加された順序で要素を格納します。 | 
| TreeMap | ツリー構造を持ったクラスです。自然順序で要素が格納されます。 | 
例
    /**
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        Map<String, String > hashMap = new HashMap<>();
        // 追加
        hashMap.put("TEST1", "A");
        hashMap.put("TEST3", "C");
        hashMap.put("TEST5", "E");
        hashMap.put("TEST2", "B");
        hashMap.put("TEST4", "D");
        hashMap.put("TEST1", "F"); // 同キーは上書き
        // 順序は持たない
        System.out.println(hashMap); 
        Map<String, String > linkedhMap = new LinkedHashMap<>();
        // 追加
        linkedhMap.put("TEST1", "A");
        linkedhMap.put("TEST3", "C");
        linkedhMap.put("TEST5", "E");
        linkedhMap.put("TEST2", "B");
        linkedhMap.put("TEST4", "D");
        linkedhMap.put("TEST1", "F"); // 同キーは上書き
        // 格納準
        System.out.println(linkedhMap); 
        Map<String, String > treehMap = new TreeMap<>();
        // 追加
        treehMap.put("TEST1", "A");
        treehMap.put("TEST3", "C");
        treehMap.put("TEST5", "E");
        treehMap.put("TEST2", "B");
        treehMap.put("TEST4", "D");
        treehMap.put("TEST1", "F"); // 同キーは上書き
        // 自然順序
        System.out.println(treehMap); 
    }
まとめ
| コレクション名 | 内容 | 使い分け | 
|---|---|---|
| List | 順序付き・重複可の要素コレクション | 順序が必要・重複も許容する場合に使用する | 
| Set | 重複不可・順序を保証しない(場合が多い)要素コレクション | 重複を許さない場合に使用する | 
| Map | キーと値のペアを管理、キーは一意 | キーと値で対応させたい場合に使用する | 
ドキュメント
【公式ドキュメント】
Java SE Specifications (oracle.com)
最後に
Javaの環境構築は、この記事を参照してみてください。
【開発環境構築】VS CodeでJavaを使用するための環境構築を実施する – SEもりのLog (selifemorizo.com)
以上、ログになります。
これからも継続していきましょう!!

 
  
  
  
  
コメント