java - 如何使 2D ArrayList 不可变?

标签 java arraylist 2d wrapper immutability

在我正在处理的项目中,我有一个代表一些数据的 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/

相关文章:

java - 如何在 Spark 中创建必须应用于数据集的函数管道?

java - Java中的十进制到二进制赋值

java - 以相反的顺序对集合进行排序

java - 如何从 ArrayList 中添加和删除重复的对象?

c# 一个集合来保存两个arraylist

JavaFX 线段宽度

java - 有谁知道任何 Sprite Collection ?

Java ArrayList<GenericObject>.remove(GenericObject) 返回 false,但仍减少 ArrayList 的大小

java - 如何访问不同类中的数组列表

c++ - vector vector 的问题是什么?