黑马程序员技术交流社区

标题: 迭代器原理 [打印本页]

作者: 青皮核桃    时间: 2015-6-23 22:31
标题: 迭代器原理
迭代器是怎么遍历获取集合元素的呢
作者: 符慢慢    时间: 2015-6-23 23:49
这个  还在后面吧.记得  毕老师16天  有讲到..
作者: rightyuan521    时间: 2015-6-23 23:51
Iterator是一个迭代器接口,专门用来迭代各种Collection集合,包括Set集合和List集合。

    java要求各种集合都提供一个iteratot()方法,该方法返回一个Iterator用于遍历集合中的元素。至于返回的Iterator是哪一种实现类我们并不关心,这就是典型的“迭代器模式”。

    使用Iterator遍历集合元素,很好的隐藏了集合的内部细节。

    Iterator接口包含以下三个方法:

boolean hasNext():如果被迭代的集合元素还没有被遍历,则返回true。
Object next():返回集合里下一个元素
void remove():移除集合里上一次next()返回的元素
例子:

public class IteratorTest {
public static void main(String[] args) {
  Collection books  = new HashSet();
  books.add("计算机网络");
  books.add("数字信号处理");
  books.add("java语言程序设计");
  //生成迭代器
  Iterator it = books.iterator();
  int i=0;
  while(it.hasNext()){
   //next()返回的数据是Object型,需要强制转化
   String info = (String)it.next();
   //输出遍历的每一个元素
   System.out.println("第"+i+"个元素:"+info);
   if(info.equals("数字信号处理")){
    System.out.println(i);
    it.remove();  //把《数字信号处理》从集合books中移除
   }
   i++;   
  }
  //输出移除后的结果
  System.out.println(books);
}

}


作者: JJJD    时间: 2015-6-23 23:59
  1. //使用Iterator对象,迭代遍历
  2.                 Iterator<String> it=li.iterator();
  3.                 while(it.hasNext()){
  4.                 System.out.println("迭代输出:"+it.next());
  5.                 }
复制代码

作者: Baymaxman    时间: 2015-6-24 11:49
楼上很对~
作者: 1千克=1024克    时间: 2015-6-24 13:04
listIterator 目测是通过索引进行取数据遍历的   
而Iterator的工作原理到底是什么捏  没有索引 怎么知道集合中有多少数据,每个数据是什么
求解啊 功能原理
作者: 青皮核桃    时间: 2015-6-24 22:13
1千克=1024克 发表于 2015-6-24 13:04
listIterator 目测是通过索引进行取数据遍历的   
而Iterator的工作原理到底是什么捏  没有索引 怎么知道集 ...

public class ArrayList implements List
{
        public Iterator iterator() {
        return new Itr();
    }
   
    private class Itr implements Iterator {
        public boolean hasNext() {
            return xxx;;
        }

        public E next() {
            return xxx;
        }
    }
}public interface Iterator
                        {
                                public abstract boolean hasNext();
                                public abstract Object next();
                        }

                        public interface Collection
                        {
                                public abstract Iterator iterator();
                        }

                        public interface List extends Collection
                        {
                                ...
                        }
                       
                        public class ArrayList implements List
                        {
                                public Iterator iterator()
                                {
                                        return new Itr();
                                }

                                private class Itr implements Iterator
                                {
                                        public boolean hasNext(){...}
                                        public Object next(){...}
                                }
                        }
由于多种集合的数据结构不同,所以存储方式不同,所以,取出方式也不同。
这个时候,我们就把判断和获取功能定义在了一个接口中,将来,遍历哪种
集合的时候,只要该集合内部实现这个接口即可
作者: 贾森    时间: 2015-6-24 22:40
1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

  (2) 使用next()获得序列中的下一个元素。

  (3) 使用hasNext()检查序列中是否还有元素。

作者: 金亮0602    时间: 2015-6-24 23:13
刚学习了,有人回答的更详细了,顺便学习一下
作者: shuaiqi_P_D    时间: 2015-6-24 23:29
原理是 内部类实现的




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