【发布时间】:2011-01-26 00:51:48
【问题描述】:
在Java中,如何在初始化后将ArrayList设为只读(这样任何人都不能添加元素、编辑或删除元素)?
【问题讨论】:
标签: java collections jakarta-ee arraylist
在Java中,如何在初始化后将ArrayList设为只读(这样任何人都不能添加元素、编辑或删除元素)?
【问题讨论】:
标签: java collections jakarta-ee arraylist
将ArrayList 传递给Collections.unmodifiableList()。它返回指定列表的不可修改视图。只使用这个返回的List,而不是原来的ArrayList。
【讨论】:
ArrayList" 是一个非常重要的补充!将ArrayList 传递给该方法不会神奇地更改对象。它只返回一个不可修改的包装器。
ArrayList。这对于公开封装在对象中的数据的类似List 的视图来说是一种很好的技术。对对象的修改将更新List 视图,但视图本身不接受任何修改。
unmodifiableList() 返回一个 List 对象。我可以以某种方式将其转换回ArrayList吗?当我尝试这样做时,我得到了一个ClassCastException。
您确定要在这种情况下使用ArrayList 吗?
也许最好先用您的所有信息填充ArrayList,然后在Java 程序初始化时将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.");
}
}
【讨论】:
将集合对象传递给 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);
}
}
同样,您也可以创建其他不可修改的集合
【讨论】: