ArrayList 的列表在不应该更改的时候被更改
List of ArrayList being altered when it's not supposed to
(kb 是数组列表的列表)
我目前正在尝试将 kb.get(i) 中的元素添加到数组列表路径中,尽管它们也被添加到 kb 中找到的第一个数组列表中,而这并不是我想要的。
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));
}
}
(kb 是数组列表的列表)
我目前正在尝试将 kb.get(i) 中的元素添加到数组列表路径中,尽管它们也被添加到 kb 中找到的第一个数组列表中,而这并不是我想要的。
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));
}
}