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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于陈 中级黑马   /  2012-5-10 15:41  /  1683 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. Iterator it = list.iterator();
  2. while (it.hasNext()) {
  3.            Integer i = (Integer)it.next();
  4.            System.out.println(i);
  5.   }
复制代码
那我直接用for循环遍历不是一样啊~还有HashMap只能用迭代器来遍历吗?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
Iterator迭代器采用的是快速失败机制,就是假如你在访问一个集合的时候  其他线程修改了该集合,你用其他方式遍历都会显示修改后的量,而Iterator遍历会引发ConcurrentModificationException异常,这样可以避免共享资源而引发的潜在问题。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
是 你说的没错 也完全可以用for循环做 现在考虑的是效率的问题
hashmap是只能用迭代器来遍历虽然可以用map.entrySet()的方法和keySet()de但是最终还是用迭代器来做的

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
迭代器就像一个指针一样,是一个可以遍历集合对象里的元素的接口。
for循环:主要是用于循环次数确定的循环.还可以用于循环输出数组里的每个元素
iterator迭代主要用于循环输出一个集合中的每个元素.
两种方式遍历:
   1. HashMap hashmap = new HashMap();
   2. Iterator iterator = hashmap.keySet().iterator();
   3. while (iterator.hasNext()) {
   4.        Object value = hashmap.get(iterator.next());
   5.         }

   1. HashMap hashmap = new HashMap();
   2. Iterator iterator = hashmap.entrySet().iterator();           
   3.  while (iter.hasNext()) {
   4.                 Entry entry = (Entry) iter.next();
   5.                 Object value= entry.getValue();
   6.                 Object key =entry.getKey();
   7.                             }

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
蒋映辉 发表于 2012-5-10 15:48
Iterator迭代器采用的是快速失败机制,就是假如你在访问一个集合的时候  其他线程修改了该集合,你用其他方 ...

你说的这个快速失败机制有点像线程访问数据时的一种安全机制,又不是加锁的那种,但是好像 HashMap是没有线程安全机制的,而做服务器的时候,需要线程安全的时候应该直接用Hashtable吧?Hashtable有多个线程访问的时候jvm会给线程排队,前一个操作了后一个再操作,这个有点晕啊.....

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马