首页 > 解决方案 > 我想知道如何将一组字符串类型的数组列表添加到数组列表中

问题描述

我想将一组字符串类型的数组列表对象添加到另一个数组列表中以存储该字符串类型的数组列表对象。

前任:[[<, 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 对象,就像这样。

[[., .], [., .], [., .], [., .]]

我想纠正那个替换缺陷。

标签: javaarraylist

解决方案


您反复添加singleLineIdentiedTokensallLineIdentiedTokens. 这意味着所有这些添加都指向同一个 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在当前时间点保留一份副本,而不是重复添加一个以后可能会改变值的引用。


推荐阅读