java求解。万分感谢。

2025-05-22 17:13:00
推荐回答(1个)
回答1:

你在用iterator遍历原list的时候, 是不可以对原list做任何增删改操作. 你的程序在运行时会报错

Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
at IteratorDemo.addTicket(IteratorDemo.java:27)
at IteratorDemo.main(IteratorDemo.java:14)

iterator借口内部只有一个remove()方法, 你可以在做判断之后,直接调用it.remove()将当前对象从list中删除.以达到, for/while 循环遍历无法对list本身进行删除的作用.

import java.util.ArrayList;
import java.util.Iterator;
public class IteratorDemo
{
public static void main(String[] args)
{
new IteratorDemo().addTicket();
}
public void addTicket()
{
ArrayList parkingTickets = new ArrayList();
parkingTickets.add(new ParkingTicket("1"));
parkingTickets.add(new ParkingTicket("2"));
parkingTickets.add(new ParkingTicket("3"));
System.out.println(parkingTickets);
Iterator it = parkingTickets.iterator();
while (it.hasNext())
{
ParkingTicket ticket = it.next();
if (ticket.name.equals("2"));
it.remove(); // will remove current parkingTicket from parkingTickets
// parkingTickets.add(ticket); //java.util.ConcurrentModificationException
}
System.out.println("===============");
System.out.println(parkingTickets);
}
class ParkingTicket
{
String name;
public ParkingTicket(String name)
{
this.name = name;
}
@Override
public String toString()
{
return name;
}
}
}