2014-04-23 158 views
1

我有這種方法,編輯列表,但功能之外它似乎並沒有工作:編輯列表似乎不起作用

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

因爲'original'只聲明爲這個方法 – nikis

+0

?original是一個參數 – Phate

回答

1

您無法更改Java中某個方法中對象的引用。 Java不是C++。相反,您可以返回result,然後使用它。在Java中

private List<LinkConnection> deleteOpposites(List<LinkConnection> original){ 
.... 
return result; 
} 

對象按引用傳遞,然而,引用本身是由value.In換句話說過去了,引用的副本將被傳遞,這是爲什麼你修改的參考始終是本地的。

3

original = result;

這種說法只是result參考分配給original,並不會影響其最初引用的Listoriginal。爲了達到你想要的,你可以做這樣的事情。

original.clear(); // Clear the elements of the original list 
original.addAll(result); // add all the elements from result to the original list 
0

原始是一個局部變量。改變它不會影響當前方法之外的任何狀態。雖然原版指向一個可變的列表。所以你可以改變它的狀態和所有其他的代碼,對這個列表的引用會看到這些改變。