一、结缘
实话说,最开始刷题的时候,刷的是 LeetCode,后来才注意到了剑指 offer 的存在,最开始也是听别人说的,剑指 offer 在面试过程中出现的概率很大,就去尝试将其都做了一遍,做的过程中发现,其实有一部分题目与 LeetCode 有重合,但是更像是 LeetCode 经典题目的集合,更具有代表性。
最开始刷过一遍剑指 offer 后,其实印象并不深,直到我参加了 年的秋招面试,才深刻的意识到剑指 offer 的题目出现高频性,至此之后,但凡有人问我怎么刷题,我都会先推荐刷剑指 offer,然后刷 LeetCode 的前 200 题,如今力扣中也有了官方授权的剑指 offer 题目,这实在是令人感到兴奋,结合平台出色的刷题体验,我相信更多的人会了解剑指 offer,下面我结合面试谈谈为什么我如此推崇。
Student student = iterator.next();
if (“male”.equals(student.getGender())) {
iterator.remove();//使用迭代器的删除方法删除
}
}
这种使用迭代器遍历、并且使用迭代器的删除方法(remove()) 删除是正确可行的,也是开发中推荐使用的。
误区:
如果将上例中的iterator.remove(); 改为list.remove(student);将会报ConcurrentModificationException异常。
这是因为:使用迭代器遍历,却使用集合的方法删除元素的结果。
再说for循环:
总体来说,不建议使用高级for循环(增强for循环)遍历删除/增加操作。
原因就是可能会报ConcurrentModificationException异常。
说可能是比较准确的,可能会报,也可能不报。
总结干货:
1.使用高级for循环遍历删除/增加元素时,如果在某次循环的过程中进行了删除或者是增加元素的操作,使用break或者return语句结束了循环操作,不报异常。
2.使用高级for循环遍历删除/增加元素时,除了1这种情况之外,必报ConcurrentModificationException异常。
验证:
1.break/return 语句结束循环
//准备数据
List list = new ArrayList<>();
list.add(new Student(“male”));
list.add(new Student(“female”));
list.add(new Student(“female”));
list.add(new Student(“male”));
//遍历删除增强for循环除去男生
for (Student student : list) {
if (“male”.equals(student.getGender())) {
list.remove(student);//使用集合的删除方法删除
break;//或者return
}
}
Log.d(“操作结果:”, list.toString());
Log日志为:操作结果:: [Student{gender=‘female’}, Student{gender=‘female’}, Student{gender=‘male’}]
2.其它情况:
//高级for遍历删除元素,没有break/return
for(Student student : list){
if (“male”.equals(student.getGender())) {
list.remove(student);//使用集合的删除方法删除
}
}
普通for循环:
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》开源
Android优秀开源项目:
/public/P7/Android/git
最后
有任何问题,欢迎广大网友一起来交流,分享高阶Android学习视频资料和面试资料包~
偷偷说一句:群里高手如云,欢迎大家加群和大佬们一起交流讨论啊!
blic/P7/Android/git**
最后
有任何问题,欢迎广大网友一起来交流,分享高阶Android学习视频资料和面试资料包~
偷偷说一句:群里高手如云,欢迎大家加群和大佬们一起交流讨论啊!
[外链图片转存中…(img-xflKfDmg-1649665746000)]
如果觉得《java中List遍历删除元素 Android进阶之光》对你有帮助,请点赞、收藏,并留下你的观点哦!