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

Javaで配列の要素を不変(イミュータブル)にするには?unmodifiableList()の使い方を解説

結論から言うと、Javaでは配列そのものの要素を不変(イミュータブル)にすることはできません

しかし、java.util.Collectionsクラスが提供するunmodifiableList()メソッドを利用すれば、読み取り専用のリストを作成できます。このメソッドはListインターフェースを実装したオブジェクトを受け取り、その変更不可能なビューを返します。取得したリストに対して、ユーザーが行える操作は参照のみです。

また、java.util.ArraysクラスのasList()メソッドを使うと、配列をListオブジェクトへ変換できます。

配列を読み取り専用のリストに変換する手順

  • 対象となる配列を用意します。

  • Arrays.asList()メソッドを使って、配列をListオブジェクトに変換します。

  • 変換したリストをCollections.unmodifiableList()メソッドに引数として渡し、変更不可能なリストを取得します。

サンプルコード

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class UnmodifiableExample {
    public static void main(String args[]) {
        // 文字列型の配列を作成
        String strArray[] = {"Raju", "Rama", "Rahman", "Rachel", "Ranbhir", "Rangan"};
        // 配列をListオブジェクトに変換
        List<String> list = Arrays.asList(strArray);
        // Listオブジェクトを変更不可能な形に変換
        List<String> immutable = Collections.unmodifiableList(list);
        System.out.println(immutable);
        // 要素を追加しようとすると例外が発生
        immutable.add("komala");
    }
}

実行結果

[Raju, Rama, Rahman, Rachel, Ranbhir, Rangan]
Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.Collections$UnmodifiableCollection.add(Unknown Source)
    at September19.UnmodifiableExample.main(UnmodifiableExample.java:19)

解説

上記のコードでは、まず文字列の配列を作成し、Arrays.asList()でリストに変換しています。その後、Collections.unmodifiableList()によって読み取り専用のリストを生成しています。

出力を見ると、リストの内容は正常に表示されていますが、immutable.add("komala")で要素を追加しようとした時点でUnsupportedOperationExceptionがスローされます。これは、unmodifiableList()で生成されたリストが追加・削除・更新などの変更操作を許可しないためです。

なお注意点として、unmodifiableList()が返すのは「ビュー」であり、元の配列やリスト自体が不変になるわけではありません。元の配列の要素を書き換えると、その変更はビューにも反映されます。完全なイミュータブルなコレクションが必要な場合は、Java 9以降で利用可能なList.of()メソッドの使用も検討するとよいでしょう。

  1. Androidで配列の要素を並べ替える方法をわかりやすく解説

    この記事では、Androidアプリで配列の要素を並べ替え(ソート)する方法を、実際に動くサンプルコードとともに解説します。数値が入った配列を昇順に並べ替え、その結果を画面に表示するまでの一連の手順を確認していきましょう。 手順1:新規プロジェクトを作成する まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な項目を入力してプロジェクトを作成してください。 手順2:レイアウトファイルにコードを追加する 次に、res/layout/activity_main.xml に以下のコードを記述します。 <?x

  2. AndroidでVolleyを使ってArrayListに要素を取得・表示する方法

    はじめにこの記事では、AndroidアプリでVolleyライブラリを使ってサーバーからJSONデータを取得し、その結果をArrayList(配列リスト)に格納して画面に表示する方法を解説します。VolleyはGoogleが提供するHTTP通信ライブラリで、ネットワークリクエストの管理やレスポンスの処理をシンプルなコードで実現できるのが特徴です。本チュートリアルでは、モックAPIからユーザーデータを取得し、「users」配列内の各ユーザーの「name」を抽出してArrayListに追加し、TextViewに一覧表示するサンプルアプリを作成します。手順1:新規プロジェクトの作成Android St