JAVA集合遍历删除方法
/**
* 集合遍历删除元素的方法
*/
public class DeleteList {
public static void main(String[] args) {
//创建集合
ArrayList<String> list = new ArrayList<>();
list.add("mysql");
list.add("redis");
list.add("nacos");
list.add("linux");
list.add("windows");
list.add("redis");
list.add("redis");
list.add("ubuntu");
System.out.println(list);
//[mysql, redis, nacos, linux, windows, redis, redis, ubuntu]
// 需求:删除全部的redis信息。
// 1、迭代器遍历删除
Iterator<String> it = list.iterator();
while (it.hasNext()){
String ele = it.next();
if("redis".equals(ele)){
//list.remove(ele); // 集合删除会出现bug-“java.util.ConcurrentModificationException”
it.remove(); // 删除迭代器所在位置的元素值(方案一)
}
}
System.out.println(list);
/**
* 2、foreach(增强for循环)遍历删除也会出问题:
* 不能遍历的同时删除元素(“java.util.ConcurrentModificationException”)
*/
for (String s : list) {
if("redis".equals(s)){
list.remove(s);
}
}
// 3、lambda表达式(也会出现问题,Lambda也不能同时遍历并删除,会出现bug)
list.forEach(s -> {
if ("redis".equals(s)) {
list.remove(s);
}
});
// 4.1、for循环(边遍历边删除集合,但是必须从后面开始遍历删除才不漏掉应该删除的元素)(推荐一)
for (int i = list.size() - 1; i >= 0 ; i--) {
String str = list.get(i);
if("redis".equals(str)){
list.remove(str);
}
}
// 4.2、for循环(边遍历边删除集合,但是必须从后面开始遍历删除才不漏掉应该删除的元素)(推荐二)
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
if("redis".equals(str)){
list.remove("redis");
i--;
}
}
System.out.println(list);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误