Copying sets Java

SNpn picture SNpn · Sep 24, 2011 · Viewed 104.1k times · Source

Is there a way to copy a TreeSet? That is, is it possible to go

Set <Item> itemList;
Set <Item> tempList;

tempList = itemList;

or do you have to physically iterate through the sets and copy them one by one?

Answer

Stephen C picture Stephen C · Sep 24, 2011

Another way to do this is to use the copy constructor:

Collection<E> oldSet = ...
TreeSet<E> newSet = new TreeSet<E>(oldSet);

Or create an empty set and add the elements:

Collection<E> oldSet = ...
TreeSet<E> newSet = new TreeSet<E>();
newSet.addAll(oldSet);

Unlike clone these allow you to use a different set class, a different comparator, or even populate from some other (non-set) collection type.


Note that the result of copying a Set is a new Set containing references to the objects that are elements if the original Set. The element objects themselves are not copied or cloned. This conforms with the way that the Java Collection APIs are designed to work: they don't copy the element objects.