web-dev-qa-db-ja.com

ArrayListを読み取り専用にします

Javaでは、初期化後にArrayListを読み取り専用にする(どの要素も要素を追加、編集、または削除できないようにする)にはどうすればよいですか?

56
gmhk

ArrayListCollections.unmodifiableList() に渡します。指定されたリストの変更不可能なビューを返します。返されたListのみを使用し、元のArrayListは使用しないでください。

108
Mark Pope

リストオブジェクトを Collections.unmodifiableList() に渡します。以下の例を参照してください。

import Java.util.*;

public class CollDemo
{
    public static void main(String[] argv) throws Exception
    {
        List stuff = Arrays.asList(new String[] { "a", "b" });
        List list = new ArrayList(stuff);
        list = Collections.unmodifiableList(list);
        Set set = new HashSet(stuff);
        set = Collections.unmodifiableSet(set);
        Map map = new HashMap();
        map = Collections.unmodifiableMap(map);
        System.out.println("Collection is read-only now.");
    }
}
4

コレクションオブジェクトを Collections クラスの同等の変更不可能な関数に渡します。次のコードは、 unmodifiableList の使用を示しています

_import Java.util.ArrayList;
import Java.util.Collections;
import Java.util.List;


public class Temp {

    public static void main(String[] args) {

        List<Integer> objList = new ArrayList<Integer>();
        objList.add(4);
        objList.add(5);
        objList.add(6);
        objList.add(7);

        objList = Collections.unmodifiableList(objList);
        System.out.println("List contents " + objList);

        try {
            objList.add(9);
        } catch(UnsupportedOperationException e) {
            e.printStackTrace();
            System.out.println("Exception occured");
        }
        System.out.println("List contents " + objList);
    }

}
_

同様に、変更できない他のコレクションを作成することもできます

1
Amar Magar

この場合、ArrayListを使用してもよろしいですか?

最初にArrayListにすべての情報を入力し、次にJavaプログラムが初期化されたときにArrayListを最終的な配列に変換する方がよいでしょう。

1
Jama22