2014-12-13 106 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)哪里。