刪除ArrayList元素的4種正確方法
阿新 • • 發佈:2018-06-23
tor 正確方法 tar 刪除 不同的 new mov 需要 推薦
1.倒序刪
倒序刪不會出現像正序刪那樣因為刪完元素後剩余的元素索引發生改變而遺漏元素並且最終會報java.lang.IndexOutOfBoundsException異常的情況。
public static void remove(List<String> list, String target){ for(int i = list.size() - 1; i >= 0; i--){ String item = list.get(i); if(target.equals(item)){ list.remove(item); } } }
2.CopyOnWriteArrayList線程安全刪除
利用CopyOnWrite容器。CopyOnWrite容器即寫時復制的容器。通俗的理解是當我們往一個容器添加元素的時候,不直接往當前容器添加,而是先將當前容器進行Copy,復制出一個新的容器,然後新的容器裏添加元素,添加完元素之後,再將原容器的引用指向新的容器。這樣做的好處是我們可以對CopyOnWrite容器進行並發的讀,而不需要加鎖,因為當前容器不會添加任何元素。所以CopyOnWrite容器也是一種讀寫分離的思想,讀和寫不同的容器。
public static void remove(ArrayList<String> list, String target) {
final CopyOnWriteArrayList<String> cowList = new CopyOnWriteArrayList<String>(list);
for (String item : cowList) {
if (item.equals(target)) {
cowList.remove(item);
}
}
}
3.叠代器remove方法刪除(推薦)
public static void remove(List<String> list, String target){
Iterator<String> iter = list.iterator ();
while (iter.hasNext()) {
String item = iter.next();
if (item.equals(target)) {
iter.remove();
}
}
}
4.增強for循環中刪除
增強for循環中刪除元素後繼續循環會報java.util.ConcurrentModificationException異常,因為元素在使用的時候發生了並發的修改,導致異常拋出,但是刪除完畢馬上使用break跳出,則不會觸發報錯。
public static void remove(List<String> list, String target){
for (String item : list) {
if (item.equals(target)) {
list.remove(item);
break;
}
}
}
刪除ArrayList元素的4種正確方法