如何更改此方法以删除TreeSet中的所有奇数长度字符串而不是数组?
public void removeOddLength(ArrayList<String> list) {
for (int i=0; i < list.size(); i++) {
if (list.get(i).length() % 2 != 0) {
list.remove(i);
}
}
}
答案 0 :(得分:1)
你的方法已经被打破,因为它不会考虑所有的字符串 - 如果你有{&#34; foo&#34;,&#34; bar&#34;,&#34; ab& #34;,&#34; cd&#34;那么你仍然会留下&#34; bar&#34;之后,因为你重复的方式。
当你对一个集合进行迭代时改变一个集合通常会很痛苦 - 从 API 的角度来看,只需返回一个带有偶数字符串的新集合就更清晰了在之后。
但是,可以使用迭代器执行此操作:
public void removeOddLength(Iterable<String> strings) {
for (Iterator<String> it = strings.iterator(); it.hasNext(); ) {
if (it.next().length() % 2 != 0) {
it.remove();
}
}
}
这将接受列表或一个集合,或者实际上任何其他可迭代序列 - 只要迭代器支持删除,当然。