使ArrayList只读

在Java中,如何在初始化之后使ArrayList只读(以便任何人都不能添加元素,编辑或删除元素)?

将ArrayList传递给Collections.unmodifiableList() 。 它返回指定列表的不可修改视图。 只能使用这个返回的List,而不要使用原来的ArrayList。

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

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

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

查看Google Collections ,并根据您的需要查看ImmutableList。 但是那里的一切都值得一看。

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

同样的方式,你也可以创build其他集合,也是不可修改的

  • Collections.unmodifiableMap(地图);
  • Collections.unmodifiableSet(组);