黑马程序员技术交流社区

标题: 迭代器怎么回事? [打印本页]

作者: 于陈    时间: 2012-5-10 15:41
标题: 迭代器怎么回事?
  1. Iterator it = list.iterator();
  2. while (it.hasNext()) {
  3.            Integer i = (Integer)it.next();
  4.            System.out.println(i);
  5.   }
复制代码
那我直接用for循环遍历不是一样啊~还有HashMap只能用迭代器来遍历吗?
作者: 蒋映辉    时间: 2012-5-10 15:48
Iterator迭代器采用的是快速失败机制,就是假如你在访问一个集合的时候  其他线程修改了该集合,你用其他方式遍历都会显示修改后的量,而Iterator遍历会引发ConcurrentModificationException异常,这样可以避免共享资源而引发的潜在问题。
作者: 李啸    时间: 2012-5-10 15:49
是 你说的没错 也完全可以用for循环做 现在考虑的是效率的问题
hashmap是只能用迭代器来遍历虽然可以用map.entrySet()的方法和keySet()de但是最终还是用迭代器来做的
作者: 强文何    时间: 2012-5-10 16:09
迭代器就像一个指针一样,是一个可以遍历集合对象里的元素的接口。
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.                             }


作者: 于陈    时间: 2012-5-10 16:09
蒋映辉 发表于 2012-5-10 15:48
Iterator迭代器采用的是快速失败机制,就是假如你在访问一个集合的时候  其他线程修改了该集合,你用其他方 ...

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2