一、使用 for 循环删除

错误操作

  1. List<String> list = new ArrayList<>();
  2. list.add("one");
  3. list.add("two");
  4. list.add("two");
  5. list.add("three");
  6. list.add("four");
  7. for (int i = 0; i < list.size(); i++) {
  8. if (list.get(i).equals("two")) {
  9. // 由于删除后 list 内的元素整体往前移,如果没有对 i 进行处理则会出现漏删的情况
  10. list.remove(i);
  11. }
  12. }
  13. System.out.println(list); // [one, two three, four]

正确操作

  1. List<String> list = new ArrayList<>();
  2. list.add("one");
  3. list.add("two");
  4. list.add("two");
  5. list.add("three");
  6. list.add("four");
  7. for (int i = 0; i < list.size(); i++) {
  8. if (list.get(i).equals("two")) {
  9. list.remove(i);
  10. // 如果删除了元素,i 减 1
  11. i --;
  12. }
  13. }
  14. System.out.println(list); // [one, three, four]

二、使用 Iterator 的 remove 方法删除

  1. List<String> list = new ArrayList<>();
  2. list.add("one");
  3. list.add("two");
  4. list.add("two");
  5. list.add("three");
  6. list.add("four");
  7. Iterator<String> iterator = list.iterator();
  8. while (iterator.hasNext()) {
  9. if (iterator.next().equals("two")) {
  10. iterator.remove();
  11. }
  12. }
  13. System.out.println(list); // [one, three, four]

三、使用 removeIf 方法删除

  1. List<String> list = new ArrayList<>();
  2. list.add("one");
  3. list.add("two");
  4. list.add("two");
  5. list.add("three");
  6. list.add("four");
  7. list.removeIf(s -> s.equals("two"));
  8. System.out.println(list); // [one, three, four]