java - 我想知道如何将一组字符串类型的数组列表添加到数组列表中
问题描述
我想将一组字符串类型的数组列表对象添加到另一个数组列表中以存储该字符串类型的数组列表对象。
前任:[[<, int, char], [12, &&, text], [<<, ||], [., .]]
我创建了一个字符串类型数组列表来存储字符串值。还有一个ArrayList类型的arraylist来存储字符串类型的arraylists。
我将文件路径作为输入。该文件具有这样的内容
while (j < 6 || j > 90) {
i = 1;
while (i < 6) {
System.out.print("* ");
i++;
}
System.out.println();
j++;
}
switch ( rt ) {
case t1:
case 12:
case e3:
case 43e:
}
}
csCalculator sizeObject = new csCalculator();
List<Integer> csMarkList = new ArrayList<Integer>();
ArrayList<String> singleLineIdentiedTokens = new ArrayList<>();
Collection<ArrayList<String>> allLineIdentiedTokens = new ArrayList<>();
int returnCsMark = 0;
for(String obj:list) {
singleLineIdentiedTokens = (ArrayList<String>) sizeObject.calcCsOfStatement(obj);
csMarkList.add(singleLineIdentiedTokens.size());
allLineIdentiedTokens.add(singleLineIdentiedTokens);
System.out.println(singleLineIdentiedTokens);
System.out.println(allLineIdentiedTokens);
if (!(singleLineIdentiedTokens.isEmpty())) {
singleLineIdentiedTokens.clear();
}
}
System.out.println("CS MARK OF STATEMENT");
System.out.println(singleLineIdentiedTokens);
System.out.println(csMarkList);
我想要一个这样的数组。[[<, int, char], [12, &&, text], [<<, ||], [., .]]
但它给出了一个数组,其中最后一个字符串 arraylist 替换了所有以前的 arraylist 对象,就像这样。
[[., .], [., .], [., .], [., .]]
我想纠正那个替换缺陷。
解决方案
您反复添加singleLineIdentiedTokens
到allLineIdentiedTokens
. 这意味着所有这些添加都指向同一个 ArrayList。您println(allLineIdentiedTokens)
将打印如下内容:
[singleLineIdentiedTokens.toString(), singleLineIdentiedTokens.toString(), ... ]
这正是您所看到的,因为您得到:
[[., .], [., .], [., .], [., .]]
. 如您所见,唯一保留的值是分配给 的最后一个值singleLineIdentiedTokens
。您可以通过如下更改代码来解决此问题:
... //logic
for(String obj:list) {
singleLineIdentiedTokens = (ArrayList<String>) sizeObject.calcCsOfStatement(obj);
csMarkList.add(singleLineIdentiedTokens.size());
allLineIdentiedTokens.add(new ArrayList<>(singleLineIdentiedTokens));// <- change this line
System.out.println(singleLineIdentiedTokens);
System.out.println(allLineIdentiedTokens);
if (!(singleLineIdentiedTokens.isEmpty())) {
singleLineIdentiedTokens.clear();
}
}
... //more logic
这样做是singleLineIdentiedTokens
在当前时间点保留一份副本,而不是重复添加一个以后可能会改变值的引用。
推荐阅读
- assembly - Grub 没有正确加载我的操作系统
- python - 给定代码的混淆矩阵。数据集仅包含 6 个类,没有标签
- flutter - Flutter Dialog 作为单独的文件和类
- node.js - Mocha 测试在本地运行良好,但由于解构语法而在 Travis 上失败?
- java - 在 mousePressed() 之后 keyPressed() 方法不起作用
- r - 引用 r data.table ':=' 中的嵌套列表元素(通过引用赋值)
- python - Python Basemap 脚本使用 Anaconda cmd 提示符运行,但不使用 VS Code
- r - 具有两条独立线性回归线的剂量反应图
- html - CSS - overflow-y 元素不能滚动
- java - 无法通过 @Model 参数进行 junit 控制器测试