软件构造学习笔记3-Java集合类遍历时删除需要注意的问题

本文详细介绍了在Java中遍历并删除List集合元素时容易遇到的问题,包括普通for循环、增强for循环以及迭代器删除元素时的错误示例。文章通过错误代码展示了遍历过程中可能导致的不完全移除或并发修改异常,并提供了正确的解决方案,即使用迭代器配合其remove()方法来避免此类问题。
摘要由CSDN通过智能技术生成

这个点是老师上课讲过的,但是写实验的时候反复犯错,在此记录一下,加深印象,提醒自己。

Java集合类,例如List,对其进行遍历,如果遍历时要删除元素,很容易出错。

普通for循环(下标遍历):移除不完全。

增强for循环:移除一个正确,移除第二个就会抛出ConcurrentModificationException。

迭代器+集合类remove方法混合:移除不完全。

错误示例1:

    public static void dropCourse6(ArrayList<String> subjects)
    {
    	MyIterator<String> iter = new MyIterator(subjects);
    	while(iter.hasNext())
    	{
    		String subject = iter.next();
    		if(subject.startsWith("6"))
    		{
    			subjects.remove(subject);
    		}
    	}
    }

运行test://dropCourse(["6.045", "6.005", "6.813"])

                //expected [], actual ["6.005"]

SnapShot diagram分析:

错误示例2:增强for循环--并发修改异常

    for(String subject: subjects)
    {
    	if(subject.startsWith("6."))
    	{
    		subjects.remove(subject);
    	}
    }

解决方案:用迭代器遍历,并且删除时用迭代器的remove方法。

        while(iter.hasNext())
    	{
    		String subject = iter.next();
    		if(subject.startsWith("6"))
    		{
    			iter.remove();
    		}
    	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值