Java 编辑作为参数传递的列表似乎不起作用
我有一个编辑列表的方法,但在函数之外,它似乎不起作用:Java 编辑作为参数传递的列表似乎不起作用,java,Java,我有一个编辑列表的方法,但在函数之外,它似乎不起作用: private void deleteOpposites(List<LinkConnection> original){ List<LinkConnection> result = new ArrayList<LinkConnection>(); while(original.size() > 0){ LinkConnection l = original.remo
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;
}
正如您所看到的,my alghoritm从原始列表中删除元素以进行处理。现在,已处理列表位于结果局部变量中,我希望原始列表指向新列表
无论如何,从这个函数中,我只得到一个空列表…original=result
此语句仅将结果的引用分配给original,不影响original最初引用的列表。为了达到你想要的,你可以这样做
original.clear(); // Clear the elements of the original list
original.addAll(result); // add all the elements from result to the original list
原始=结果
此语句仅将结果的引用分配给original,不影响original最初引用的列表。为了达到你想要的,你可以这样做
original.clear(); // Clear the elements of the original list
original.addAll(result); // add all the elements from result to the original list
original是一个局部变量。更改它不会影响当前方法之外的任何状态。虽然original指向一个列表,但它是可变的。因此,您可以更改它的状态,所有其他引用该列表的代码将看到这些更改。original是一个局部变量。更改它不会影响当前方法之外的任何状态。虽然original指向一个列表,但它是可变的。因此,您可以更改它的状态,所有其他引用该列表的代码将看到这些更改。您不能在Java中更改方法中对象的引用。java不是C++。相反,您可以返回结果,然后使用它
private List<LinkConnection> deleteOpposites(List<LinkConnection> original){
....
return result;
}
Java中的对象是通过引用传递的,但是引用本身是通过值传递的。换句话说,引用的副本将被传递,这就是为什么对引用的修改总是本地的。您不能在Java中的方法中更改对象的引用。java不是C++。相反,您可以返回结果,然后使用它
private List<LinkConnection> deleteOpposites(List<LinkConnection> original){
....
return result;
}
Java中的对象是通过引用传递的,但是引用本身是通过值传递的。换句话说,将传递引用的副本,这就是为什么您对引用的修改总是本地的。因为只有此方法才声明了original?original是一个参数,因为original仅为此方法声明?original是一个参数