java ArrayList 清空元素时迭代器造成的错误

在 HeadFirst JAVA中,例子:攻击网站游戏

书中提供的在检查是否击中目标时的代码:

for(DotCom dotComToTest : dotComsList){
			result = dotComToTest.checkYourself(userGuess);
			if(result.equals("hit")){
				break;
			}else if(result.equals("kill")){
				dotComsList.remove(dotComToTest);
				break;
			}
		}

其中使用的迭代器的方式对目标列表进行遍历,但是在执行中却出现了错误。

错误类型: java.util.AbstractList$Itr.next()

是因为ArrayList中元素清空,导致迭代器报错

多种情况可以参考 

http://lggege.iteye.com/blog/249430

代码修正:

 for(int i = 0; i < dotComsList.size(); i ++){
 			result = dotComsList.get(i).checkYourself(userGuess);
 			if(result.equals("hit")){
 				break;
 			}else if(result.equals("kill")){
 				dotComsList.remove(i);
 				break;
 			}
 		}


转载于:https://my.oschina.net/hotpot/blog/314091

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的ArrayList是一个动态数组,可以在运行根据需要动态增加或删除元素。它是Java集合框架中的一种,可以存储任何类型的对象,包括基本类型的包装类。 1. 创建ArrayList对象 创建ArrayList对象的语法如下: ```java ArrayList<T> list = new ArrayList<T>(); ``` 其中,T代表元素的类型,可以是任何类型。 例如,创建一个存储整型数据的ArrayList对象: ```java ArrayList<Integer> list = new ArrayList<Integer>(); ``` 2. 添加元素 可以使用add()方法向ArrayList中添加元素,例如: ```java list.add(1); list.add(2); list.add(3); ``` 也可以使用addAll()方法一次添加多个元素: ```java List<Integer> newList = Arrays.asList(4, 5, 6); list.addAll(newList); ``` 3. 访问元素 可以使用get()方法访问ArrayList中的元素,例如: ```java int first = list.get(0); // 获取第一个元素 int second = list.get(1); // 获取第二个元素 ``` 4. 删除元素 可以使用remove()方法删除ArrayList中的元素,例如: ```java list.remove(0); // 删除第一个元素 list.remove(Integer.valueOf(2)); // 删除值为2的元素 ``` 5. 修改元素 可以使用set()方法修改ArrayList中的元素,例如: ```java list.set(0, 100); // 将第一个元素修改为100 ``` 6. 遍历元素 可以使用for循环、foreach循环或迭代器遍历ArrayList中的元素,例如: ```java // for循环 for (int i = 0; i < list.size(); i++) { int num = list.get(i); System.out.println(num); } // foreach循环 for (int num : list) { System.out.println(num); } // 迭代器 Iterator<Integer> iterator = list.iterator(); while (iterator.hasNext()) { int num = iterator.next(); System.out.println(num); } ``` 7. 其他常用方法 除了上述方法外,ArrayList还提供了其他常用的方法,例如: - size():获取ArrayList元素的个数。 - isEmpty():判断ArrayList是否为空。 - clear():清空ArrayList中的所有元素。 - indexOf():获取指定元素ArrayList中的索引。 - lastIndexOf():获取指定元素ArrayList中最后一次出现的索引。 - toArray():将ArrayList转换为数组。 - subList():获取ArrayList的子列表。 总结 ArrayListJava集合框架中的一种动态数组,可以存储任何类型的对象。它提供了丰富的方法用于添加、访问、删除和修改元素,同也提供了多种遍历方式。在使用ArrayList,需要注意线程安全和性能问题。如果需要在多线程环境下使用ArrayList,建议使用线程安全的ArrayList实现类,如CopyOnWriteArrayList。如果需要对大量数据进行随机访问,建议使用数组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值