复制集Java
有没有办法复制TreeSet
?就是可以去吗?
Set <Item> itemList;
Set <Item> tempList;
tempList = itemList;
或者你必须在集合中进行物理迭代并一个接一个地复制它们吗
你可以在下面搜索框中键入要查询的问题!
有没有办法复制TreeSet
?就是可以去吗?
Set <Item> itemList;
Set <Item> tempList;
tempList = itemList;
或者你必须在集合中进行物理迭代并一个接一个地复制它们吗
# 1 楼答案
另一种方法是使用copy constructor:
或者创建一个空集并添加元素:
与
clone
不同,这些允许您使用不同的集合类、不同的比较器,甚至可以从其他(非集合)集合类型填充请注意,复制
Set
的结果是一个新的Set
,其中包含对作为元素的对象的引用(如果原始Set
)。图元对象本身不会被复制或克隆。这符合JavaCollection
API的工作方式:它们不复制元素对象# 2 楼答案
当您创建了一个} 时,它将取决于您正在使用的
Set
时(或者当您知道它来自何处时),由@Stephen C给出的复制构造函数就是一种方法。 当它来自^{Map
实现:findbugs说
由于复制构造函数调用了
addAll()
,您可能会发现自己只拥有一个条目集:最后一个条目但并非所有的
Map
实现都会这样做,因此,如果您知道您的实现在这方面是安全的,那么复制构造函数肯定是一种选择。否则,您必须自己创建新的Entry
对象:编辑:与我在Java7和Java6U45上执行的测试不同(多亏了StephenC),findbugs注释似乎不再合适了。在早期版本的Java6(u45之前)上可能是这样,但我没有任何测试
# 3 楼答案
Java 8+:
# 4 楼答案
使用Java 8,您可以使用
stream
和collect
复制项目:或者您可以收集到
ImmutableSet
(如果您知道集合不应更改):# 5 楼答案
从Java 10开始:
^{} 返回一个不可修改的
Set
,其中包含给定Collection
的元素给定的
Collection
不能是null
,也不能包含任何null
元素