Arraylist Remove()不起作用

use*_*873 3 java arraylist

public static ArrayList<String> remove(ArrayList<String> list, int a) {

    for(int i = 0; i < list.size(); i++){
            list.remove(i);
    }
    return list;
}
Run Code Online (Sandbox Code Playgroud)

为什么这段代码不会删除数组中的每个元素?它似乎跳过了一些.当我在最后打印arraylist时,它应该是空白的,但它打印出来时仍然有一些元素.

编辑(更多代码):

public static void main(String [] args){
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter some a list of words:");
    String line = scan.nextLine();
    String[] words = line.split(" +");
    ArrayList<String> list  = new ArrayList<String>();
    for(int i=0; i<words.length; i++){
        list.add(words[i]);
    }

    System.out.println("Remove words less than how many characters?");
    int a = scan.nextInt();

    remove(list,a);
    System.out.println(list);
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 9

删除第ith个元素时,第i+1th个元素成为第ith个元素.并且由于您i在每次迭代中递增,因此跳过列表中的一半元素.

此循环将删除所有元素:

for(int i = 0; i < list.size();) {
    list.remove(i);
}
Run Code Online (Sandbox Code Playgroud)

Javadoc:

public E remove(int index)

删除此列表中指定位置的元素.将任何后续元素向左移位(从索引中减去一个).

现在,如果您希望迭代列表中的所有元素,同时只删除其中的一些元素,则可以执行以下操作:

for(int i = 0; i < list.size(); i++) {
    if (someCondition) {
        list.remove(i);
        i--;
    }
}
Run Code Online (Sandbox Code Playgroud)

这将确保您不会跳过任何元素.