我们修改集合内的元素时,常常需要遍历整个集合,找出符合条件的元素对其进行修改(比如删除),此时很容易联想到JDK提供的遍历的方法。如下
- ArrayList<Integer> list = new ArrayList<Integer>();
- list.add(1);
- list.add(2);
- list.add(3);
复制代码- for(Integer element:list) {
- if(element==2) {
-
- list.remove(element);
- }
- if(element==3) {
- //might work or might throw exception, Java calls it indefined behaviour:
- iterator.remove();
- }
- }
-
复制代码
此时我们发现,运行出现意想不到的运行结果甚至抛出异常。这是因为删除了集合内部元素,导致了指针的混乱,无法有效的遍历集合。
通过查询资料,发现利用Iterator 遍历可以达到同时删除的效果
- Iterator<Integer> iterator = list.iterator();
- while(iterator.hasNext()) {
- Integer element = iterator.next();
- if(element==2) {
-
- iterator.remove();
- }
- if(element==3) {
- //might work or might throw exception, Java calls it indefined behaviour:
- iterator.remove();
- }
- }
复制代码
另外虽然Integer 是封装类但是不能改变在集合中的Integer 对象的值.可以用一个新的集合来存储新生成的Integer对象来达到目的。 |
|