三种迭代方式能否删除

博客介绍了三种迭代方式能否删除元素的情况。普通for循环可以删除,但索引需减减;迭代器也能删除,不过要使用自身的remove方法,否则会有并发修改异常;增强for循环不能删除。还提及了普通for循环删除原理(无自减)。

三种迭代方式能否删除

1. 普通for循环,可以删除,但是索引要 - -(减减)。
2. 迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常。
3. 增强for循环不能删除。

package com.heima.jdk5;

import java.util.ArrayList;

public class Demo03_Foreach {

	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<>();
		list.add("a");
		list.add("b");
		list.add("b");
		list.add("c");
		list.add("d");
		
		//1.普通for循环删除
		/*for (int i = 0; i < list.size(); i++) {
			if ("b".equals(list.get(i))) {
				list.remove(i--);		//通过索引删除元素
			}
		}*/
		
		//2.迭代器
		/*Iterator<String> it = list.iterator();
		while (it.hasNext()) {
			if ("b".equals(it.next())) {
//				list.remove("b");		//不能用集合的删除方法,因为迭代过程中如果集合修改会出现并发修改异常
				it.remove();
			}
		}*/
		
		/*for (Iterator<String> it2 = list.iterator(); it2.hasNext(); ) {
			if ("b".equals(it2.next())) {
				it2.remove();
			}
		}*/
		
		//3.增强for循环,底层的原理是迭代器
		//增强for循环不能删除,只能遍历
		for (String string : list) {
			if("b".equals(string)) {
				list.remove("b");		//不能用集合的删除方法,因为迭代过程中如果集合修改会出现并发修改异常
			}
		}
		System.out.println(list);
	}
}

普通for循环删除原理(无自减)
在这里插入图片描述

Collection 集合的迭代器、增强 for、Lambda 三种遍历方式的特点及适用场景如下: - **迭代器**:迭代器默认指向当前集合的索引 0,在遍历过程中可以进行元素的删除操作。若取元素越界会出现 NoSuchElementException 异常。适用于在遍历过程中需要删除元素的场景[^1][^4]。 - **增强 for**:底层是迭代器,是 JDK 5 之后出现的,为了简化迭代器的代码书写。它内部原理就是一个 Iterator 迭代器,所有的单列集合和数组才能用增强 for 进行遍历。修改增强 for 中的变量,不会改变集合中原本的数据。适用于仅仅想遍历集合或数组,且不需要在遍历过程中对集合进行修改的场景[^2][^3][^4]。 - **Lambda 表达式**:也是用于单纯的遍历操作,代码简洁。适用于仅仅想遍历集合,追求代码简洁性的场景[^1]。 示例代码如下: ```java import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class CollectionTraverseDemo { public static void main(String[] args) { Collection<String> c = new ArrayList<>(); c.add("赵敏"); c.add("小昭"); c.add("素素"); c.add("张无忌"); // 迭代器遍历 Iterator<String> iterator = c.iterator(); while (iterator.hasNext()) { String element = iterator.next(); if (element.equals("小昭")) { iterator.remove(); } System.out.println(element); } // 增强 for 遍历 for (String ele : c) { System.out.println(ele); } // Lambda 表达式遍历 c.forEach(ele -> System.out.println(ele)); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

左绍骏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值