使用iterator节省代码

王朝other·作者佚名  2008-05-31
宽屏版  字体: |||超大  

当对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接口直接支持的唯一的修改方法

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有