参考:
[link] https://blog.youkuaiyun.com/huxu981598436/article/details/82699938
package exercise;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
public class ListRemoveTest {
public static void main(String[] args) {
//方法一
ArrayList<String> list = new ArrayList<String>();
list.add("aa");
list.add("bb");
list.add("bb");
list.add("aa");
list.add("cc");
//方法一或三
CopyOnWriteArrayList<String> copyList = new CopyOnWriteArrayList<String>();
copyList.add("aa");
copyList.add("bb");
copyList.add("bb");
copyList.add("aa");
copyList.add("cc");
// 删除元素 bb
// remove(list, "bb");
remove(copyList, "bb");
// for (String str : list) {
// System.out.println("1 "+str);
// }
for (String str : copyList) {
System.out.println("2 "+str);
}
}
public static void remove(List<String> list, String elem) {
// 五种不同的循环及删除方法
// 方法一:普通for循环正序删除,删除过程中元素向左移动,不能删除重复的元素(两种list都一样)
// for (int i = 0; i < list.size(); i++) {
// if (list.get(i).equals(elem)) {
// list.remove(list.get(i));
// }
// }
// 方法二:普通for循环倒序删除,删除过程中元素向左移动,可以删除重复的元素(两种list都一样)
// for (int i = list.size() - 1; i >= 0; i--) {
// if (list.get(i).equals(elem)) {
// list.remove(list.get(i));
// }
// }
// 方法三:增强for循环删除,使用ArrayList的remove()方法删除,产生并发修改异常ConcurrentModificationException
// CopyOnWriteArrayList可正常删除
// for (String str : list) {
// if (str.equals(elem)) {
// list.remove(str);
// }
// }
// 方法四:迭代器,使用ArrayList的remove()方法删除,产生并发修改异常 ConcurrentModificationException
//CopyOnWriteArrayList 不能删除连续重复的元素
// Iterator iterator = list.iterator();
// while (iterator.hasNext()) {
// if(iterator.next().equals(elem)) {
// list.remove(iterator.next());
// }
// }
// 方法五:迭代器,ArrayList使用迭代器的remove()方法删除,可以删除重复的元素,但不推荐
//对于CopyOnWriteArrayList抛异常:UnsupportedOperationException JDK1.8
// Iterator iterator = list.iterator();
// while (iterator.hasNext()) {
// if(iterator.next().equals(elem)) {
// iterator.remove();
// }
// }
}
}