2014-12-13 105 views
1

假設我有兩個List s,並且我想將一個列表中的所有列表複製/分配給另一個列表,其中保留對原始列表的引用。我使用此代碼指定列表並保留參考

List<String> mylist = new List<String>(); 
List<String> another = getSomeList(); 

// I have to do 
mylist.clear(); 
mylist.addAll(another); 

這工作正常,但我的問題是,有沒有更好的方法來做到這一點?

感謝

+1

Collections.copy(dest,src),你在找? http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#copy%28java.util.List,%20java.util.List%29 – sol4me 2014-12-13 11:28:15

+0

讓我們來說說例如List1 = [1,2,3]和List2 = [4,5,6]因此根據你什麼是預期的輸出? – sol4me 2014-12-13 11:35:08

+0

@ sol4me'mylist = [4,5,6]'但有自己的參考 – 2014-12-13 11:36:48

回答

1

我不認爲有一個更簡單的方法。你可以實現你自己的列表,例如一種setAll()方法。

class MyArrayList<E> extends ArrayList<E> { 

    public void setAll(Collection<E> collection) { 
    clear(); 
    addAll(collection); 
    } 

} 

但這只是移動的clear()addAll() invokation到另一種方法。當然從客戶何衛青它使通話更容易

MyArrayList<String> mylist = new MyArrayList<String>(); 
mylist.setAll(another); 

,但在你使用一個特殊列表實現的價格。也許你只能在類中使用這個實現,並且你的API不會公開你使用了MyArrayList。比它可能會好。我會按照你已經做的方式去做。

+0

我衷心感謝您的回答 – 2014-12-13 11:49:08

-1

你可以通過第一,並添加所有元素融入到另一個循環:

for(String s : mylist){ 
    another.add(s); 
} 
+0

@downvoter請解釋一下? – drgPP 2014-12-13 11:28:47

+0

我是downvoter,仔細閱讀問題 – 2014-12-13 11:30:39

+0

那麼我的答案有什麼問題?您希望將第一個列表中的所有元素複製到另一箇中,而不會丟失對第一個列表的引用通過這種方式,您可以複製第一個列表中的所有引用,而不是單獨引用列表引用。 – drgPP 2014-12-13 11:32:12

0

有沒有更好的方式來做到這一點?

不,不符合您的規格。您可以刪除 mylist = another;

而且也沒有必要呼籲mylist.clear()當你剛分配mylist = new List<String>();

所以真的,所有你需要的是最後一行你addAll(another)哪裏。