Java List循環(huán)安全刪除元素的幾種方式如下:
- 使用迭代器(Iterator):通過調(diào)用List的iterator()方法獲取List的迭代器,然后使用迭代器的remove()方法刪除元素。這種方式可以避免在遍歷過程中修改List導(dǎo)致的并發(fā)修改異常(ConcurrentModificationException)。
示例代碼:文章來源:http://www.zghlxwxcb.cn/news/detail-676049.html
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class SafeRemoveDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if ("B".equals(item)) {
iterator.remove();
}
}
System.out.println(list);
}
}
- 使用Java 8的Stream API:通過調(diào)用List的stream()方法創(chuàng)建一個(gè)Stream對(duì)象,然后使用Stream的filter()和collect()方法過濾并收集需要保留的元素。這種方式也可以避免在遍歷過程中修改List導(dǎo)致的并發(fā)修改異常。
示例代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-676049.html
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class SafeRemoveDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
List<String> filteredList = list.stream()
.filter(item -> !"B".equals(item))
.collect(Collectors.toList());
System.out.println(filteredList);
}
}
- 使用CopyOnWriteArrayList:CopyOnWriteArrayList是一種特殊的List實(shí)現(xiàn),它在進(jìn)行修改操作時(shí)(如add、set等)會(huì)復(fù)制一個(gè)新的底層數(shù)組,然后在新的數(shù)組上進(jìn)行修改,最后將新數(shù)組賦值給原數(shù)組。這樣,在遍歷過程中對(duì)CopyOnWriteArrayList進(jìn)行修改操作不會(huì)導(dǎo)致并發(fā)修改異常。但是,CopyOnWriteArrayList的性能較差,因?yàn)樗枰l繁地復(fù)制底層數(shù)組。因此,在不需要在遍歷過程中修改List的情況下,建議使用其他方式。
到了這里,關(guān)于Java List循環(huán)安全刪除元素的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!