make ArrayList只读

gmh*_*mhk 58 java collections arraylist java-ee

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

Mar*_*ope 112

通行证ArrayList进入Collections.unmodifiableList().它返回指定列表的不可修改视图.只使用此返回List,而不是原始ArrayList.

  • "...并且只使用返回的List,而且从来没有原始的`ArrayList`"是一个非常重要的补充!将`ArrayList`传递给该方法并不会神奇地改变对象.它只返回一个不可修改的包装器. (32认同)
  • 有时你想保留原来的`ArrayList`.这可以是一种很好的技术,用于公开封装在对象中的"List"式数据视图.对对象的修改将更新`List`视图,但视图本身不接受任何修改. (3认同)
  • @Pieter不可修改的列表不是扩展名; 这是一个委托人.您始终可以将内容复制到新列表并进行修改,但是没有提供修改不可修改列表中内容的机制,这有点重要. (2认同)

Aru*_*ena 5

将列表对象传递给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.");
    }
}
Run Code Online (Sandbox Code Playgroud)