Arraylist无法删除重复的字符串

Sad*_*tun 2 java collections arraylist

public static void main(String[] args) {
       List<String> list = new ArrayList();
       list.add("AA");list.add("Aw");list.add("Aw");list.add("AA");
       list.add("AA");list.add("A45");list.add("AA");
       list.add("Aal");list.add("Af");list.add("An");

       System.out.println(list);

       for(int i=0;i<list.size();i++){
          if(list.get(i).equals("AA")){
             list.remove(i);
          }
       }

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

我目前正在尝试删除ArrayList中具有值的所有元素"AA",但是,它只删除其中的一些而不是全部.任何人都可以向我解释我做错了什么?

arraylist中的元素:

[AA, Aw, Aw, AA, AA, A45, AA, Aal, Af, An]
Run Code Online (Sandbox Code Playgroud)

我试图删除所有具有值的字符串后输出"AA".

[Aw, Aw, AA, A45, Aal, Af, An]
Run Code Online (Sandbox Code Playgroud)

为什么还在AA输出列表中?

ΦXo*_*a ツ 5

这是错的:

 for (int i = 0; i < list.size(); i++) {
        if (list.get(i).equals("AA")) {
            list.remove(i);
        }
    }
Run Code Online (Sandbox Code Playgroud)

因为只要你删除元素,你的列表就会改变它的大小....

你需要一个迭代器:

Iterator<String> iter = list.iterator();
    while (iter.hasNext()) {
        if (iter.next().equals("AA")) {
            iter.remove();
        }
    }
Run Code Online (Sandbox Code Playgroud)

使用java8:

 List<String> newFilteredList = list.stream().filter(i -> !i.equals("AA")).collect(Collectors.toList());
    System.out.println(newFilteredList);
Run Code Online (Sandbox Code Playgroud)