作为参数传递的编辑列表似乎不起作用

时间:2014-04-23 08:48:16

标签: java

我有这个编辑列表的方法,但在函数之外它似乎不起作用:

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从原始列表中删除了元素以便处理它们。现在,处理后的列表在结果局部变量中,我希望我的原始列表指向新列表。

无论如何,出于这个功能,我只得到一个空列表......

3 个答案:

答案 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)

原始是一个局部变量。更改它不会影响当前方法之外的任何状态。虽然原始指向一个可变的列表。因此,您可以更改它的状态和所有其他代码,其中包含对该列表的引用将会看到这些更改。