如何用另一个arraylist的内容替换arraylist的内容?

Posted

技术标签:

【中文标题】如何用另一个arraylist的内容替换arraylist的内容?【英文标题】:How to replace contents of arraylist with the contents of another arraylist? 【发布时间】:2016-01-23 13:26:17 【问题描述】:

我想将一个数组列表的内容完全替换为另一个数组列表的内容。 例如,

ArrayList<String> old = new ArrayList<String>();
ArrayList<String> newlist = new ArrayList<String>();
old.add("Hi");
old.add("World");
newlist.add("League")
newlist.add("OfLegends"):
old = newlist;

当我尝试这样做时,它会出现这种奇怪的行为,即数组列表的大小会随着更多元素而翻倍。我不想要一个两倍于原始数组列表大小的数组列表,我只想用新数组列表覆盖旧数组列表,其中新旧数组列表的内容相同。有没有办法在没有某种循环的情况下做到这一点,或者这是我唯一的选择?谢谢你和恳求

【问题讨论】:

当我尝试它时,它确实取代了它。 newlist.add("OfLegends"): 应该是 ; :) newlist.add("League")之后也是一个分号 【参考方案1】:
old.clear(); 
old.addAll(newList);

这将清除旧列表并将引用的副本从 newList 添加到旧列表。如果您对旧列表进行更改,新列表将不受影响(反之亦然)。

请注意,就您的代码而言,您将旧列表设置为与新列表相同的对象引用。更改其中一个列表(使用add()remove())将更改另一个,因为它们共享相同的底层对象。

【讨论】:

它使用System.arraycopy,这是一种原生方法【参考方案2】:

我尝试了以下方法:

ArrayList<String> old = new ArrayList<String>();
ArrayList<String> newList = new ArrayList<String>();
old.add("Hi");
old.add("World");
newList.add("League");
newList.add("OfLegends");
System.out.println(old.toString());
old = newList;
System.out.println(old.toString());
System.out.println(newList.toString());

我的输出是:

[Hi, World]
[League, OfLegends]
[League, OfLegends]

看来您的代码正在运行。

【讨论】:

这是不正确的,old 只是对newList 的引用,而不是真正的副本。尝试修改新的,旧的也会神奇地改变。【参考方案3】:

这是您要查找的构造函数:

http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#ArrayList(java.util.Collection)

public ArrayList(Collection&lt;? extends E&gt; c)

按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表。

【讨论】:

以上是关于如何用另一个arraylist的内容替换arraylist的内容?的主要内容,如果未能解决你的问题,请参考以下文章

如何用另一个替换 SpriteNode

如何用另一个列表元素随机替换列表元素?

如何用另一个数组值替换javascript中的数组值?

如何用另一个键替换散列键

如何用另一个字符串替换一个字符串的所有实例?

如何用 ViewPager 中的另一个片段替换 Android 片段?