服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

使用iterator节省代码


  当对map 或者collection执行iterate时,通过遍历map或者collection应用程序接口(api)删除一个元素是非法的。如果你试着运行如下的代码:

import java.util.*;
public class testiterator {

static public void main(string[ ] strs) {
hashmap map = new hashmap( );
map.put("one", "1");
map.put("two", "2");
map.put("three", "3");
iterator iterator = map.keyset( ).iterator( );
object obj = iterator.next( );
obj = iterator.next( );
map.remove(obj);
obj = iterator.hasnext( );
}
}
就会抛出如下异常:

exception in thread "main" java.util.concurrentmodificationexception
at java.util.hashmap$hashiterator.next(hashmap.java:736)
at testiterator.main(testiterator.java:14)

remove 方法使iterator无效,并且当在下一次对iteration操作的时候,异常就会抛出。仔细检查iterator的api,以便正确地从iterator中移走当前值。可对前面的例子做如下修改:

map.remove(obj);
把上行换为:

iterator.remove(obj);
任何对map的改变都会使iterator无效,remove 是iterator接口直接支持的唯一的修改方法

扫描关注微信公众号