使用iterator节省代码

ZDNet软件频道 时间:2003-03-11 作者:翻译:Java研究组织-live |  我要评论()
本文关键词:javatips
当对map 或者collection执行iterate时,通过遍历map或者collection应用程序接口(API)删除一个元素是非法的。
本文译自Builder.com当对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接口直接支持的唯一的修改方法。



责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134