How could I change this method to remove all odd length strings in a TreeSet instead of an array?
public void removeOddLength(ArrayList<String> list) {
for (int i=0; i < list.size(); i++) {
if (list.get(i).length() % 2 != 0) {
list.remove(i);
}
}
}
Well your method is already broken, in that it won't consider all the strings - if you have {"foo", "bar", "ab", "cd" } then you'll still be left with "bar" afterwards, because of the way you're iterating.
It's generally a pain to mutate a collection while you're iterating over it - it would be cleaner from an API perspective to just return a new collection with the even strings in afterwards.
However, you can do this with an iterator:
public void removeOddLength(Iterable<String> strings) {
for (Iterator<String> it = strings.iterator(); it.hasNext(); ) {
if (it.next().length() % 2 != 0) {
it.remove();
}
}
}
That will accept either a list or a set, or indeed any other iterable sequence - so long as the iterator supports removal, of course.
See more on this question at Stackoverflow