每天进步一点点_遍历集合删除元素的异常


今天做的一道测试题出现的,觉得有必要记录一下,这里作简要说明;

题目和代码如下:

package com.itheima;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Test2
{
	/*
	 * 2、 一个ArrayList对象aList中存有若干个字符串元素,现欲遍历该ArrayList对象,
	 * 删除其中所有值为"abc"的字符串元素,请用代码实现。
	 * 分析:
	 * 1.创建集合对象;
	 * 2.向集合中添加元素;
	 * 3.遍历集合中的元素,并判断这个元素是否和"abc"相同,如果相同就删除
	 * 步骤:
	 * 1.创建ArrayList集合对象aList
	 * 2.使用add()方法添加元素
	 * 3.使用Iterator()方法遍历元素
	 * 4.使用equals方法判断元素是否和"abc"相同
	 * 5.相同就使用remove()方法删除该元素
	 */
	public static void main(String[] args)
	{
		//创建ArrayList集合对象aList
		List<String> aList = new ArrayList<String>();
		//添加元素
		aList.add("abc");
		aList.add("bcd");
		aList.add("cde");
		aList.add("abc");
		//遍历集合中的元素并判断元素是否和"abc"相同
		for(Iterator<String> it = aList.iterator();it.hasNext();)
		{
			if(it.next().equals("abc"))
			{
				it.remove();//这里使用it调用remove方法,如果使用aList调用就会报错
			}
		}
		//输出删除后,集合中的元素
		for(String str : aList)
		{
			System.out.println(str);
		}

	}


此题需要注意的是:

voidremove()
从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

删除集合中的元素,不能使用集合.remove(Object obj)删除,这样会出现java.util.ConcurrentModificationException

使用迭代器it.remove()可以避免这个问题


size(),length(),length的使用情况

size()用于获取集合中元素的个数

length()用于获取字符串长度

length用于获取数组的长度


他们的角标位都是从0开始,都不包含尾角标元素

在获取其对应角标最后的元素时,都要减去1:

str.charAt(length() - 1)

arr[arr.length-1]

list集合中的size()方法表示元素的个数,这里不用-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值