Java 9の不変(イミュータブル)コレクションのメリットとは?
Java 9では、Collections APIに複数のファクトリメソッドが追加されました。これらのファクトリメソッドを利用することで、変更不可(unmodifiable)なList・Set・Mapのコレクションオブジェクトを簡単に作成でき、コードの行数を大幅に削減できます。List.of()、Set.of()、Map.of()、Map.ofEntries()は、Java 9において不変(イミュータブル)コレクションを手軽に生成するための静的ファクトリメソッドです。
不変コレクションのメリット
- ヒープ領域の節約:従来のJavaバージョンでの作成方法と比較して、コレクションデータを格納するために必要なメモリ領域が非常に小さくなります。
- 高速なデータアクセス:データの格納やCollections.unmodifiableによるラップ処理のオーバーヘッドが削減されたため、データへのアクセスが高速化します。その結果、プログラム全体の効率も向上します。
- スレッドセーフ:不変コレクションは本質的にスレッドセーフです。すべてのスレッドが常に同じデータの状態を参照するため、同期処理を意識せずに安全に扱えます。
構文
List.of(elements...) Set.of(elements...) Map.of(k1, v1, k2, v2)
サンプルコード
import java.util.Set;
import java.util.List;
import java.util.Map;
public class ImmutableCollectionsTest {
public static void main(String args[]) {
List<String> stringList = List.of("a", "b", "c");
System.out.println("List values: " + stringList);
Set<String> stringSet = Set.of("a", "b", "c");
System.out.println("Set values: " + stringSet);
Map<String, Integer> stringMap = Map.of("a", 1, "b", 2, "c", 3);
System.out.println("Map values: " + stringMap);
}
}実行結果
List values: [a, b, c]
Set values: [a, b, c]
Map values: {a=1, b=2, c=3}このように、Java 9の静的ファクトリメソッドを使えば、わずか数行のコードで不変コレクションを生成できます。なお、これらのコレクションに対して要素の追加や削除を行おうとするとUnsupportedOperationExceptionがスローされる点にも注意してください。
-
Javaのクラスの種類一覧!具象・抽象・final・POJO・静的・内部クラスを徹底解説
Javaには、用途や宣言方法に応じてさまざまな種類のクラスが存在します。それぞれのクラスには固有の役割があり、適切に使い分けることで、保守性の高いコードを書くことができます。この記事では、Javaの代表的な6つのクラスの種類について、コード例とともにわかりやすく解説します。 1. 具象クラス(Concrete Class) 具象クラスとは、抽象メソッドを持たない通常のクラス、または親クラスやインターフェースのすべてのメソッドを実装しているクラスのことです。直接インスタンス化できる、最も一般的なクラスです。 コード例 public class Concrete { // 具象クラス
-
SOCKS5プロキシのメリットとは?VPNとの違いや活用法を徹底解説
VPNとプロキシサーバーを比較すると、多くの人はVPNの方が信頼性とセキュリティが高いと考えています。確かにその通りです。VPNは暗号化されたトンネルを通じて安全な接続を確立できる一方、従来のプロキシサーバーはWeb閲覧中の安全性を十分に保証してくれません。 では、「SOCKS5プロキシ」という言葉を聞いたことはありますか?SOCKS5は、プロキシサーバーのより安全なバージョンとも言える存在で、プライバシーとセキュリティを強化するための追加の利点をもたらしてくれます。 この記事では、SOCKS5プロキシの基本情報、主なメリット、そして安全な接続を確立するためにSOCKS5プロキシをVPNと併