从数组列表中删除时java中的当前修改异常

时间:2014-08-15 00:26:16

标签: java

  public void removeVehicle(String licenseNum){      

      for (Vehicle vehicle : vehicleLot){

    String flag = vehicle.getLicenseNumber().toString();
        if(flag.compareTo(licenseNum) == 0){
            int num = vehicleLot.indexOf(vehicle);

        vehicleLot.remove(num);
    }

我遇到了这个例外情况,我正在尝试从数组列表中删除与上述许可证号码匹配的车辆。

我的数组列表就像这个私人

 List<Vehicle> vehicleLot = new ArrayList<Vehicle>();

3 个答案:

答案 0 :(得分:2)

除非使用迭代器本身删除项目,否则无法从使用迭代器迭代的ArrayList中删除元素(这是for(element : list)在封面下使用的内容)。

你可以做的是使用声明的迭代器迭代列表,或通过数字索引来避免这个问题。

E.g。

Iterator<Vehicle> iterator = vehicleLot.iterator();
while(iterator.hasNext())
{
  Vehicle vehicle = iterator.next();
  String flag = vehicle.getLicenseNumber().toString();
  if(flag.compareTo(licenseNum) == 0)
  {
    iterator.remove();
  }

}

答案 1 :(得分:1)

java中的foreach循环不是真正的运行时特性。它只是替换两个循环之一的语法。

在那些实现Iterable&lt; T>循环有效

Iterator< T > itr = list.iterator();
while( itr.hasNext() ) {
    T t = itr.next();
    // Loop stuff
}

这意味着您无法在不引发异常的情况下编辑foreach循环中的List,并且必须遵守使用迭代器时所设置的所有限制,而无需访问迭代器。

在数组上它实际上是

T[] arr = ...;
for( int i = 0; i < arr.length; i++ ) {
    T elm = arr[ i ];
    // Loop stuff
}

答案 2 :(得分:0)

处理此问题的旧方法(在花式迭代器之前)是:

public void removeVehicle(String licenseNum){      
    for (int i = vehicleLot.size() - 1; i >= 0; i--) {
        Vehicle vehicle = vehicleLot.get(i);
        String flag = vehicle.getLicenseNumber().toString();
        if (flag.equals(licenseNum)) {
           vehicleLot.remove(i);
        }
    }
}