在Java中,有些场景需要遍历集合中的元素,然后根据条件进行删除元素的操作。如果使用传统的for循环遍历方式来删除元素,很可能出错或发生意想不到的问题。推荐使用迭代器iterator完成
1. 推荐使用迭代器方式****删除
阿里规约:【强制】不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator方式,如果并发操作,需要对 Iterator 对象加锁。文章来源:https://www.toymoban.com/news/detail-666380.html
@Test
void testList2(){
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if ("2".equals(item)) {
iterator.remove();
}
}
System.out.println(list);
}
2. 尽量不要使用for循环遍历删除,否则很可能出问题。
因为删除元素后,数组元素发生前移,后续遍历可能导致文章来源地址https://www.toymoban.com/news/detail-666380.html
- 数组访问越界错误:元素减少,但是size()没有变,(可改成for里使用list.size())
- 有元素没遍历到
@Test
void testList(){
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
for (String item : list) {
if ("2".equals(item)) {
list.remove(item);
}
}
System.out.println(list);
}
//或
@Test
void testList2(){
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
int size = list.size();
for (int i=0; i<size; i++) {
if ("2".equals(list.gei(i))) {
list.remove(i);
}
}
System.out.println(list);
}
3. 如果非要使用这种的话,可以使用倒序遍历删除,这样即使发生元素移动,不影响前面的元素
@Test
void testList3(){
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
for (int i=list.size()-1; i>=0; i--) {
if ("2".equals(list.gei(i))) {
list.remove(i);
}
}
System.out.println(list);
}
到了这里,关于【笔记】Java中for循环遍历删除操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!