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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hmr8 中级黑马   /  2013-4-30 18:49  /  1264 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

迭代器怎么理解,虽能存储不同的数据类型,以前看过qt中的类似的容器,一般后面都有数据类型,java中的怎么区分?都是tostring()?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

6 个回复

倒序浏览
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();

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
哥们,抱歉你的后两个问题我也不太明白,整理一点迭代器的资料,希望能帮到你
回复 使用道具 举报
基本碰到的有两种集合类: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;}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
首先我们为什么要使用迭代器Iterator,使用它之后有什么效果?

       使用迭代器无非是获取容器的里的元素,我对Iterator的理解就是,容器通过Iterator方法,将容器中的元素按照容器自身元素的存储规则形成一个0...n的队列!使用Iterator的hasNext()方法就等同于 i != n 来判断是否已经到达队列尾部, 使用Iterator的next()方法则索引 i++对应容器的元素!
回复 使用道具 举报
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马