gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 20:15:32 25 4
gpt4 key购买 nike

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

25 4 0