为了明确起见,我有one 3D ArrayList,我打算使用它:来容纳几个2D ArrayLists.
3D ArrayList (当我说3D ArrayList时,这就是我所指的):
ArrayList<ArrayList<ArrayList<String>>> main_Functions = new ArrayList<>();2D ArrayList (当我说2D ArrayList时,这就是我指的):
ArrayList<ArrayList<String>> localValues = new ArrayList<>();但是在添加每个2D ArrayList之后,我打算清除保存原始2D ArrayList的变量。所以旧的信息不会干扰新添加的信息等等。但是当我清除保存原始2D ArrayList (添加到3D ArrayList中的内容)的变量之后,添加到3D ArrayList中的数据就会被删除。。
我的代码如下:
ArrayList<ArrayList<String>> localValues = new ArrayList<>();
ArrayList<ArrayList<ArrayList<String>>> main_Functions = new ArrayList<>();
if (arrayListNotEmpty(localValues)) {
main_Functions.add(localValues);
localValues.clear();
}如何解决这个问题?,以便将信息添加到3D ArrayList中,保留在2D ArrayList的清除中。
发布于 2015-05-28 02:14:04
您的情况基本上是这样的:(我删除了一个级别的ArrayList,以使其更清晰)
ArrayList<String> inner = new ArrayList<>();
ArrayList<ArrayList<String>> outer = new ArrayList<>();
inner.add("Hello World!");
outer.add(inner);
System.out.println(outer.get(0)); // prints [Hello World!]
inner.clear();
System.out.println(outer.get(0)); // prints [] i.e. an empty list或者,甚至更简单:
ArrayList<String> a = new ArrayList<>();
a.add("Hello World!");
ArrayList<String> b = a;
System.out.println(b); // prints [Hello World!]
a.clear();
System.out.println(b); // prints []这是因为a和b不包含ArrayLists,在Java中,如果我们说变量包含ArrayList,我们实际上的意思是它保存了对ArrayList的引用。
换句话说,a实际上包含的是"ArrayList #1234“或类似的内容。b还包含"ArrayList #1234“。行a.clear()清除ArrayList #1234,行System.out.println(b);打印ArrayList #1234的内容(我们刚刚清除了该内容)。
相反,您可以在想要复制新ArrayList时创建它。
例如,而不是
main_Functions.add(localValues);你可以做这样的事
ArrayList<ArrayList<String>> localValues_copy = new ArrayList<>(localValues);
main_Functions.add(localValues_copy);或缩短:
main_Functions.add(new ArrayList<>(localValues));这将在"3D ArrayList“中添加对全新ArrayList的引用,而不是添加对localValues引用的引用。
发布于 2015-05-28 02:01:54
List<List<String>> localValues = new ArrayList<>();
List<List<String>> localValuesCopy = new ArrayList<>(localValues);
localValues.clear();// won't affect main_Functions
List<List<List<String>>> main_Functions = new ArrayList<>();
main_Functions.add(localValuesCopy);通过为您的列表创建一个localValues副本,数据将被复制,并且清除它不会影响这些新数据。
虽然我不明白为什么要清除localValues列表,但是清除localValues不会更改main_Functions列表。
https://stackoverflow.com/questions/30495961
复制相似问题