A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© frankzheng329 中级黑马   /  2015-4-25 11:41  /  534 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我们修改集合内的元素时,常常需要遍历整个集合,找出符合条件的元素对其进行修改(比如删除),此时很容易联想到JDK提供的遍历的方法。如下
  1. ArrayList<Integer> list = new ArrayList<Integer>();
  2.                 list.add(1);
  3.                 list.add(2);
  4.                 list.add(3);
复制代码
  1. for(Integer element:list) {
  2.                 if(element==2) {
  3.                    
  4.                         list.remove(element);
  5.                 }
  6.                 if(element==3) {
  7.                     //might work or might throw exception, Java calls it indefined behaviour:
  8.                         iterator.remove();
  9.                 }
  10.             }
  11.        
复制代码


此时我们发现,运行出现意想不到的运行结果甚至抛出异常。这是因为删除了集合内部元素,导致了指针的混乱,无法有效的遍历集合。
通过查询资料,发现利用Iterator 遍历可以达到同时删除的效果
  1. Iterator<Integer> iterator = list.iterator();
  2.             while(iterator.hasNext()) {
  3.                 Integer element = iterator.next();
  4.                 if(element==2) {
  5.                 
  6.                         iterator.remove();
  7.                 }
  8.                 if(element==3) {
  9.                     //might work or might throw exception, Java calls it indefined behaviour:
  10.                         iterator.remove();
  11.                 }
  12.             }
复制代码


另外虽然Integer 是封装类但是不能改变在集合中的Integer 对象的值.可以用一个新的集合来存储新生成的Integer对象来达到目的。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马