黑马程序员技术交流社区

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

作者: hmr8    时间: 2013-4-30 18:49
标题: 迭代器
迭代器怎么理解,虽能存储不同的数据类型,以前看过qt中的类似的容器,一般后面都有数据类型,java中的怎么区分?都是tostring()?
作者: 陈国斌    时间: 2013-4-30 20:23
Iterator it = al.iterator();(接口型引用指向自己的子类对象,此对象不是new出来的,而是通过集合的方法iterator()获取到的,该方法返回在此collection的元素上进行迭代的迭代器。)
//获取迭代器,用于取出集合中的元素
while(it.hasNext())
{
        sop(it.next());
}
为了方便直接访问集合中的元素,取出方式就被定义成了内部类,而由于每种容器的数据结构不同,所以取出动作的细节也会有所区别,但他们都有一些共性的东西,所以就将他们向上进行抽取,形成一个规则,该规则就是Iterator接口,并且此接口对外提供了一个方法----iterator();通过该方法可以获取集合的取出对象。
取出集合中的元素也可以这样书写:
for(Iterator it = new Iterator();it.hasNext();)
{
        sop(it.next());
}
it作为局部变量,循环结束后,从内存中释放了,比while循环要严谨一些。
list集合特有迭代器:
在迭代过程中,不可以使用集合的方法操作集合中的元素,否则会发生并发修改异常,所以在迭代时,只能用迭代器的方法,而Iterator方法有限,只能做判断、取出和删除操作,如需要对集合中的元素进行其他操作如添加修改等,就需要用ListIterator,它是List集合特有的迭代器(因为List集合中的元素都带角标),ListIterator是Iterator的子接口,其对象通过如下方法来获取:
ListIterator li = al.ListIterator();

作者: 陈国斌    时间: 2013-4-30 20:25
哥们,抱歉你的后两个问题我也不太明白,整理一点迭代器的资料,希望能帮到你
作者: Super_Class    时间: 2013-4-30 23:34
基本碰到的有两种集合类:ArrayList  和Vector
ArrayList al  = new ArrayList();
Iterator iterator = al.iterator();
while(iterator.hasNext()){
  Object obj = iterator.Next();
  。。。。。。。。
  。。。。。。。。
}

Vector 基本与ArrayList类似。

迭代就是遍历(可以简单的这么理解)
比如add()方法;
如果在不重载的情况下,想要实现未知参数相加的情况
可以使用int add(int x1,int x2..args){
                int sum = x;
                for(int arg:args)
                {
                        sum +=arg;
                }
                return sum;}
作者: strawberry2013    时间: 2013-5-1 08:09
首先我们为什么要使用迭代器Iterator,使用它之后有什么效果?

       使用迭代器无非是获取容器的里的元素,我对Iterator的理解就是,容器通过Iterator方法,将容器中的元素按照容器自身元素的存储规则形成一个0...n的队列!使用Iterator的hasNext()方法就等同于 i != n 来判断是否已经到达队列尾部, 使用Iterator的next()方法则索引 i++对应容器的元素!

作者: 黄玉昆    时间: 2013-5-1 17:56
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢




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