How do I iterate and modify Java Sets?

Buttons840 picture Buttons840 · Sep 12, 2011 · Viewed 277.3k times · Source

Let's say I have a Set of Integers, and I want to increment every Integer in the Set. How would I do this?

Am I allowed to add and remove elements from the set while iterating it?

Would I need to create a new set that I would "copy and modify" the elements into, while I'm iterating the original set?

EDIT: What if the elements of the set are immutable?

Answer

Jonathan Weatherhead picture Jonathan Weatherhead · Sep 12, 2011

You can safely remove from a set during iteration with an Iterator object; attempting to modify a set through its API while iterating will break the iterator. the Set class provides an iterator through getIterator().

however, Integer objects are immutable; my strategy would be to iterate through the set and for each Integer i, add i+1 to some new temporary set. When you are finished iterating, remove all the elements from the original set and add all the elements of the new temporary set.

Set<Integer> s; //contains your Integers
...
Set<Integer> temp = new Set<Integer>();
for(Integer i : s)
    temp.add(i+1);
s.clear();
s.addAll(temp);