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>();
答案 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);
}
}
}