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是一个参数