ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 如何清除一个变量(列表列表),而不是无意中清除另一个?

2019-06-23 20:12:04  阅读:185  来源: 互联网

标签:java arrays android arraylist android-activity


为了清楚起见,我有一个我打算使用的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的清除上?

解决方法:

您的情况基本上是这样的:(我删除了一级ArrayLists以使其更清晰)

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的引用.

换句话说,实际包含的是“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));

这将添加对全新ArrayList的引用到“3D ArrayList”,而不是添加对localValues引用的同一个引用.

标签:java,arrays,android,arraylist,android-activity
来源: https://codeday.me/bug/20190623/1274023.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有