在我正在处理的项目中,我有一个代表一些数据的 2D ArrayList:
private ArrayList<ArrayList<T>> data = null;
现在我需要将这个 ArrayList 返回给某个对象,以便让对象检查它,但不能修改它。
我在下面的帖子中发现,一个2D的ArrayList需要用不可修改的wrapper单独包装,但是没有提到如何去做:
Does the unmodifiable wrapper for java collections make them thread safe?
所以我的问题是:如何从现有的 2D ArrayList 返回不可变的 2D ArrayList?此外,最快的方法是什么,因为实际上数据可能很大?
感谢所有的输入!
最佳答案
使用 Collections.unmodifiableList
方法:
ArrayList<ArrayList<String>> source = new ArrayList<ArrayList<String>>();
List<ArrayList<String>> out = Collections.unmodifiableList(source);
在 source
集合上调用 Collections.unmodifiableList
,不会使每个嵌套列表不可修改。如果您希望所有嵌套列表都不可修改,则需要在列表上递归执行此操作。所以:
ArrayList<ArrayList<String>> source = new ArrayList<ArrayList<String>>();
List<List<String>> temp = new ArrayList<List<String>>();
for (ArrayList<String> list : source) {
temp.add(Collections.unmodifiableList(list));
}
List<List<String>> out = Collections.unmodifiableList(temp);
关于java - 如何使 2D ArrayList 不可变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6441465/