我正在使用arrayList的arrayList进行繁重的操作.当我试图显示父数组列表时,我有一个问题,它显示空的arraylists如下所示
我的arrayList声明在下面
List<List<String>> arrayList = new ArrayList<List<String>>();
Run Code Online (Sandbox Code Playgroud)
这是我的孩子名单
List<String> stringLine = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
在我的程序中,我将这个stringLine添加到arrayList中
arrayList.add(stringLine);
Run Code Online (Sandbox Code Playgroud)
我在尝试打印父数组时输出的arrayList打印大小到目前为止44个内容是: [[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []]
注意:在上面的输出中,44是它具有的arrayList元素的no
当我尝试打印孩子时,它表现良好
StringLine is : [1640, 1138, 878, 1600, 1978, 280, 24, 2509, 702, 553, 2362, 2019, 1558, 2494, 823, 35, 1181, 1915, 1261, 1448, 493, 798, 1160, 651, 2249, 1639, 2428, 458, 2556, 939, 2114, 2339, 2373, 286, 2078, 844, 2673, 1486, 1657, 1531, 1043, 734, 2247, 2121, 75, 2599, 975, 29, 175, 960, 2151, 480, 868, 2627, 1941, 671, 2529, 1952, 1623, 2160, 2298]
Run Code Online (Sandbox Code Playgroud)
哪里,我错了?
更新:
这是我的代码片段,我在其中向父arrayList添加一个列表
private void splitString(String temp) {
System.out.println("In splitString method..");
List<String> stringLine = new ArrayList<String>();
StringTokenizer stringTokenizer = new StringTokenizer(temp, " ");
while (stringTokenizer.hasMoreTokens()) {
stringLine.add(stringTokenizer.nextToken());
}
if (stringLine.size() != 3) {
arrayList.add(stringLine);
}
stringLine.clear();
}
Run Code Online (Sandbox Code Playgroud)
更新
发布代码后,错误很明显.如您所见,List#clear将删除您的所有元素List.由于您有意删除它们,因此输出为空并不奇怪.
删除这一行:stringLine.clear();一切都应该没问题.您正在通过List<String>引用传递arrayList.add,这意味着它仍将指向stringLine您正在清除的相同内容.如果你真的需要清除,你需要深度克隆.
你需要for in正确地嵌套循环,一切都会正常工作:
List<List<String>> arrayList = new ArrayList<List<String>>();
List<String> stringLine = new ArrayList<String>();
stringLine.add("5");
stringLine.add("7");
arrayList.add(stringLine);
for (List<String> list : arrayList) {// each list in the arrayList
for (String current : list) {// each element in each list
System.out.println(current);
}
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您想List一次打印整个:
for (List<String> list : arrayList) {// each list in the arrayList
System.out.println(list); // will work as expected.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
347 次 |
| 最近记录: |