我有这个编辑列表的方法,但在函数之外它似乎不起作用:
private void deleteOpposites(List<LinkConnection> original){
List<LinkConnection> result = new ArrayList<LinkConnection>();
while(original.size() > 0){
LinkConnection l = original.remove(0); //taking first element
for(int i=0;i<original.size();i++){
if(original.get(i).oppositeLink(l))
original.remove(i);
}
result.add(l);
}
original = result;
}
你可以看到我的alghoritm从原始列表中删除了元素以便处理它们。现在,处理后的列表在结果局部变量中,我希望我的原始列表指向新列表。
无论如何,出于这个功能,我只得到一个空列表......
答案 0 :(得分:3)
original = result;
此声明只是将result
的引用分配给original
,不会影响最初由List
引用的original
。为了实现你想要的,你可以做这样的事情。
original.clear(); // Clear the elements of the original list
original.addAll(result); // add all the elements from result to the original list
答案 1 :(得分:1)
您无法在Java中更改方法中对象的引用。 Java不是C ++。相反,您可以返回result
并在之后使用它。
private List<LinkConnection> deleteOpposites(List<LinkConnection> original){
....
return result;
}
Java中的对象是通过引用传递的,但是,引用本身是通过值传递的。换句话说,将传递引用的副本,这就是为什么对引用的修改将始终是本地的。
答案 2 :(得分:0)
原始是一个局部变量。更改它不会影响当前方法之外的任何状态。虽然原始指向一个可变的列表。因此,您可以更改它的状态和所有其他代码,其中包含对该列表的引用将会看到这些更改。