关于java:删除数组列表中的每个第2个元素

Removing every 2nd element in array list

本问题已经有最佳答案,请猛点这里访问。

到目前为止,我一直在尝试编写一个方法removevenlength,它将字符串的数组列表作为参数,并从列表中删除所有长度为偶数的字符串。但到目前为止,我已经得到了一个指数超出界限的例外,我不知道为什么。

任何帮助都将不胜感激

1
2
3
4
5
6
7
8
9
10
11
public static ArrayList<String> removeEvenLength(ArrayList<String> list) {
int size = list.size();
ArrayList<String> newLst = new ArrayList<String>();

for (int x = 0; x < size; x++) {
    if (list.get(x).length() % 2 == 0) {
        list.remove(x);
    }
}

return list;

}


删除一个元素后,列表的大小将减少一个,因此变量size不再表示列表的实际大小。

另外,在删除索引i处的字符串后,i+1, i+2.. list.size() - 1中的元素将向左移动一个位置。因此,一直递增循环计数器x是错误的,您将跳过一些元素。

这是一个正确的方法

1
2
3
4
5
6
7
for (int x = 0; x < list.size();) {
    if (list.get(x).length() % 2 == 0) {
        list.remove(x);
    } else {
        x++;
    }
}

1
2
3
4
5
6
7
8
9
public static List<String> removeEvenLength(List<String> list) {
 List<String> newList = new ArrayList<String>();
 for (String item: list) {
       if (item.length % 2 != 0) {
             newList.add(item);
        }
  }
 return newList;
}