ArrayList的列表在不应更改的地方

问题描述 投票:0回答:1

((kb是arraylists的列表)

我目前正在尝试将kb.get(i)中的元素添加到arraylist路径中,尽管在不希望这样做的情况下,它们也被添加到kb中找到的第一个arraylist中。

如何初始化kb:

List<ArrayList<String>> kb = new ArrayList<>();
while (scanLines.hasNextLine()) { 
            edge = new ArrayList<>(Arrays.asList(scanLines.nextLine().split(" ")));
            System.out.println(edge);
            kb.add(edge);
        }

如何初始化路径:

List<ArrayList<String>> allPaths = new ArrayList<>();
for (ArrayList<String> line : kb) {
        if (querySubConcept.equals(line.get(0))) { //Adding all edges which have the query's sub-concept
            allPaths.add(line);
        }
    }

问题在这里

if (!checker) {
   if (!path.get(path.size() - 2).equals("IS-NOT-A") || 
          !querySuperConcept.equals(superConcept)) {
                path.add(kb.get(i).get(1));
                path.add(kb.get(i).get(2));
                superConcept = kb.get(i).get(2);

                if (querySuperConcept.equals(superConcept))
                    break;
    }
}
java for-loop arraylist element add
1个回答
0
投票

问题:您要添加现有ArrayList的引用。

解决方案:您需要添加ArrayList的副本。

执行以下操作:

for (ArrayList<String> line : kb) {
    if (querySubConcept.equals(line.get(0))) { //Adding all edges which have the query's sub-concept
        allPaths.add(new ArrayList<>(line));
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.