Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java 9で追加されたコレクションのファクトリメソッドとは?List.of()・Set.of()・Map.of()の使い方を解説

Java 9では、コレクションフレームワークに静的ファクトリメソッドが新たに追加されました。これらは変更不可能(unmodifiable)なコレクションのインスタンスを生成するための特別なstaticメソッドで、少数の要素からなるListSetMapを簡潔に作成できます。

従来はArrays.asList()Collections.unmodifiableList()などを組み合わせて不変コレクションを作成していましたが、Java 9以降はこれらのファクトリメソッドを使うことで、1行で安全かつ読みやすく記述できるようになりました。

なお、これらのメソッドで作成したコレクションに対してadd()remove()などの変更操作を行うと、UnsupportedOperationExceptionがスローされる点に注意してください。また、要素としてnullは許可されません。

List.of()メソッド

List.of()は、イミュータブル(不変)なリストを手軽に作成するための静的ファクトリメソッドです。

構文

List.of(elements...)

使用例

import java.util.List;
public class ListTest {
    public static void main(String[] args) {
        List<String> list = List.of("item 1", "item 2", "item 3", "item 4", "item 5");
        for(String l : list) {
            System.out.println(l);
        }
    }
}

実行結果

item 1
item 2
item 3
item 4
item 5

リストは挿入順に要素が保持され、その順序で反復処理されます。

Set.of()メソッド

Set.of()は、イミュータブルなセットを簡潔に作成するための静的ファクトリメソッドです。

構文

Set.of(elements...)

使用例

import java.util.Set;
public class SetTest {
    public static void main(String[] args) {
        Set<String> set = Set.of("Item 1", "Item 2", "Item 3", "Item 4", "Item 5");
        for(String s : set) {
            System.out.println(s);
        }
    }
}

実行結果

Item 5
Item 1
Item 2
Item 3
Item 4

セットには重複した要素を格納できず、また要素の反復順序は保証されません。実行結果のように、指定した順序と異なる順序で出力される場合があります。

Map.of()およびMap.ofEntries()メソッド

Map.of()Map.ofEntries()は、イミュータブルなマップを作成するための静的ファクトリメソッドです。Map.of()は最大10個のキーと値のペアまで指定できますが、それ以上のエントリを持つマップを作成したい場合はMap.ofEntries()を使用します。

構文

Map.of(k1, v1, k2, v2)
Map.ofEntries(entry(k1, v1), entry(k2, v2), ...)

使用例

import java.util.Map;
public class MapTest {
    public static void main(String[] args) {
        Map<Integer, String> map = Map.of(101, "Raja", 102, "Adithya", 103, "Jai");
        for(Map.Entry<Integer, String> m : map.entrySet()) {
            System.out.println(m.getKey() + " " + m.getValue());
        }
    }
}

実行結果

103 Jai
102 Adithya
101 Raja

マップもセットと同様に、エントリの反復順序は保証されません。また、重複したキーを渡すとIllegalArgumentExceptionがスローされます。

まとめ

Java 9で追加されたファクトリメソッドを使うと、以下のようなメリットがあります。

  • 少数要素のコレクションを1行で簡潔に作成できる
  • 生成されるコレクションは変更不可能なため、意図しない改変を防げる
  • 内部実装が最適化されており、メモリ効率に優れている

読み取り専用のデータを扱う場面では、積極的にこれらのメソッドを活用するとよいでしょう。

  1. 【Java】JListの各項目にツールチップテキストを表示する方法を解説

    JListはJComponentクラスのサブクラスであり、オブジェクトのリストを表示して、ユーザーが1つまたは複数の項目を選択できるようにするためのSwingコンポーネントです。JListはListSelectionListenerインターフェースを利用でき、その抽象メソッドであるvalueChanged()を実装する必要があります。また、JToolTipクラスはコンポーネント上にテキストやヒント(Tip)を表示するために使用されます。リストの各項目ごとに個別のツールチップテキストを設定したい場合は、getToolTipText()メソッドをオーバーライドすることで実現できます。このメソッド内

  2. JavaのMapをJSONに変換する3つの方法(Jackson・Gson・org.json)

    JavaのMap(マップ)をJSONに変換する方法はいくつかあります。Javaでは、配列やMapとJSONの相互変換を行う場面が非常に多く、Web APIとのデータ連携などでも欠かせない処理です。 この記事では、代表的なライブラリであるJackson、Gson、org.jsonを使用して、JavaのMapをJSONに変換する3つの具体例をサンプルコード付きで解説します。 Jacksonを使ってJavaのMapをJSONに変換する 最初の例では、Jackson Core と Jackson Databind を使ってJavaのMapをJSONに変換します。 Jacksonライブラリを使用するには