make ArrayList只读

时间:2010-03-10 18:08:21

标签: java collections java-ee arraylist

在Java中,如何在初始化后创建ArrayList只读(以便没有人可以添加元素,编辑或删除元素)?

4 个答案:

答案 0 :(得分:106)

ArrayList传递给Collections.unmodifiableList()。它返回指定列表的不可修改视图。仅使用此返回的List,而不是原始的ArrayList

答案 1 :(得分:4)

将列表对象传递给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.");
    }
}

答案 2 :(得分:1)

在这种情况下,您确定要使用ArrayList吗?

最好先用ArrayList填充所有信息,然后在Java程序初始化时将ArrayList转换为最终数组。

答案 3 :(得分:1)

将集合对象传递给其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);
    }

}

同样可以创建其他不可修改的集合