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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

话说使用Iterator接口佚代集合时是不能改变的集合的元素的,可是今天做小测试时怎么就有例外的情况了 ,请大家指教
  1. package collection;
  2. import java.util.*;

  3. public class IteratorErrorTest {

  4. public static void main(String[] args) {
  5. Collection books = new HashSet();
  6. books.add("hello");
  7. books.add("Java");
  8. books.add("疯狂讲义");
  9. Iterator it = books.iterator();
  10. while(it.hasNext()) {
  11. String s =(String)it.next();
  12. System.out.println(s);
  13. if(s.equals("Java")) {
  14. books.remove(s);//此处没有引发异常??
  15. }
  16. }
  17. System.out.println(books);
  18. }

  19. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

4 个回复

正序浏览
归☆夜↑『 发表于 2013-6-6 21:31
佚代过程允除了佚代器外允许对集合元素进行操作??

可以的呀。。迭带过程就是while循环每次从迭带器里面取一个元素。迭带过程实际上就是while循环过程。。。在while循环里面当然可以对外边集合做操作了。
回复 使用道具 举报
梦想蓝色天空 发表于 2013-6-6 20:54
你在迭带里面做的books.remove(s);这个操作和 把他放到迭带器外面books.remove("hello");这两个方法没有什 ...

佚代过程允除了佚代器外允许对集合元素进行操作??
回复 使用道具 举报
你在迭带里面做的books.remove(s);这个操作和 把他放到迭带器外面books.remove("hello");这两个方法没有什么区别吧,你都是在对books对象进行操作。
放到迭代器里面的作用最多就是通过迭带比较一下当前迭带的值与("Java")做了一下比较,你只是把这个方法放到迭带器里面执行,但迭带器对象本身并未对Books进行过更改。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马