((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;
}
}
问题:您要添加现有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));
}
}