【Java】コレクションフレームワーク徹底解説(List・Set・Mapの使い分け)

Java

はじめに

Javaを使って開発をしていると、必ずと言っていいほど登場するのが「コレクションフレームワーク」です。配列と似ているようで、もっと柔軟にデータを扱える仕組み。それが ListSet、そして 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)

以上、ログになります。
これからも継続していきましょう!!

Javaサーバーサイド関連
シェアする
おすすめIT本
良いコード/悪いコードで学ぶ設計入門

「ITエンジニア本大賞2023」技術書部門で大賞を受賞した本です。
・コードの可読性
・普段意識したほうが良いこと
・リファクタリング考え方
等、普段のコードを設計する際に意識することが書かれています。
コードのあるべき姿に迷ったら一度読んでみると良い本です。

仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん

Dockerって何?となったときに私が最初に読んだ本です。
Dockerがどんな仕組みで動いているのか、コマンドでは何を命令しているのかを理解できるように、イラストを多用して説明しています。

1冊ですべて身につくJavaScript入門講座

「ITエンジニア本大賞2024」技術書部門で大賞を受賞した本です。
私が次に読もうと思っている本なのでおすすめとして挙げておきたいと思います。

コメント

タイトルとURLをコピーしました