方案:使用removeIf()方法
LinkedList测试代码:
public class TestLinkedList {
public static void main(String[] args) {
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("A");
linkedList.add("B");
linkedList.add("C");
linkedList.add("D");
linkedList.add("D");
linkedList.add("D");
System.out.println(linkedList); // [A, B, C, D, D, D]
//System.out.println(linkedList.getFirst()); // 链表为空的情况,调用getFirst()会报错NoSuchElementException
//System.out.println(linkedList.getLast()); // 链表为空的情况,调用getFirst()会报错NoSuchElementException
//System.out.println(linkedList.get(2));
//linkedList.removeAll(null);
linkedList.remove("D"); // 注意:list中有三个D的元素,这里只会删除一个
System.out.println(linkedList); // [A, B, C, D, D]
linkedList.removeIf(x -> {
return x.equals("D");
}); // 这种写法,list中的"D"会全部删除
System.out.println(linkedList); // [A, B, C,]
}
}
ArrayList测试代码
private static void test5() {
// 理论上参数可以传入Integer的最大值,但是初始化时很可能会内存溢出
//ArrayList<String> list = new ArrayList<>(Integer.MAX_VALUE ); // Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit
ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("B");
list.add("B");
list.add("B");
list.add("C");
list.add("D");
list.remove("B");
System.out.println(list); // [A, B, B, B, C, D]
list.removeIf(x -> x.equals("B"));
System.out.println(list); // [A, C, D]
}