在Java中,如何在初始化后创建ArrayList
只读(以便没有人可以添加元素,编辑或删除元素)?
答案 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);
}
}
同样可以创建其他不可修改的集合