Java 如何将此方法更改为集合而不是ArrayList

Java 如何将此方法更改为集合而不是ArrayList,java,arraylist,set,Java,Arraylist,Set,如何更改此方法以删除树集而不是数组中的所有奇数长度字符串 public void removeOddLength(ArrayList<String> list) { for (int i=0; i < list.size(); i++) { if (list.get(i).length() % 2 != 0) { list.remove(i); } }

如何更改此方法以删除树集而不是数组中的所有奇数长度字符串

    public void removeOddLength(ArrayList<String> list) {
        for (int i=0; i < list.size(); i++) {
            if (list.get(i).length() % 2 != 0) {
                list.remove(i);
            }
        }
    }
public void removeOddLength(ArrayList列表){
对于(int i=0;i你的方法已经被打破了,因为它不会考虑所有的字符串——如果你有{“fo”、“bar”、“ab”、“cd”},那么由于迭代的方式,你仍然会留有“bar”。

在迭代集合时对其进行变异通常是一件痛苦的事情——从API的角度来看,只返回一个包含偶数字符串的新集合会更干净

但是,可以使用迭代器执行此操作:

public void removeOddLength(Iterable<String> strings) {
    for (Iterator<String> it = strings.iterator(); it.hasNext(); ) {
        if (it.next().length() % 2 != 0) { 
            it.remove();
        }
    }
}
public void removeOddLength(Iterable字符串){
for(Iterator it=strings.Iterator();it.hasNext();){
如果(it.next().length()%2!=0){
it.remove();
}
}
}

当然,只要迭代器支持删除,它就可以接受列表或集合,或者任何其他iterable序列。

您不知道如何修改方法签名吗?到目前为止你试过什么?请注意这很有道理。我想不出一种方法来设置for循环来实现这一点,因为我试图为每个字符串获取一个int值。我不会想到hasNext()。然而,有一个问题是,如果给该方法一个null参数怎么办?@aeipownu:那么它将抛出一个NullPointerException。如果您想让它做其他事情,您需要自己编写代码,例如立即返回。如果你想处理序列中的空值也一样。返回是什么意思?我以为你不能在void方法中返回。有什么明显的东西我遗漏了吗?@aeipownu:你可以返回,但不是一个值——只需使用return;