如何将此方法更改为Set而不是ArrayList

时间:2014-05-03 06:00:52

标签: java arraylist set

如何更改此方法以删除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);
            }
        }
    }

1 个答案:

答案 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();
        }
    }
}

这将接受列表一个集合,或者实际上任何其他可迭代序列 - 只要迭代器支持删除,当然。