java之iterator分析

iterator先正常运行

package collect;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class myiterator {
public static void main(String[] args) {
     List<String> list =new ArrayList<String>();
     list.add("China");
     System.out.println("list.addChina后:"+list);
     list.add("hello");
     System.out.println("list.addhello后:"+list);
     Iterator<String> it =list.iterator();
     System.out.println(list.size());
     System.out.println(it);
     int i = 0;
     while (it.hasNext()) {
        String str=it.next();
         ++i;
        System.out.println("运行第"+i+"次");
        System.out.println(str);
        
    }
}
}

结果

list.addChina后:[China]
list.addhello后:[China, hello]
2
java.util.ArrayList$Itr@15db9742
运行第1次
China
运行第2次
hello

正常情况下,iterator是遍历了list,并且while (it.hasNext()) 中每次it.next(); 都会赋值给str

boolean  hasNext()
     如果仍有元素可以迭代,则返回 true

E   next()
     返回迭代的下一个元素。

image箭头代表游标,it.hasNext()代表判断一下

public boolean hasNext() {
            //如果游标<list的大小,则说明还有下一个
            if (cursor<list.size()) {
                return true;
            }
            return false;
        }

当前游标0<list.size(),也就是0<2,返回true,进入while循环,接着it.next(); 这时游标往下走一个,并且返回迭代的下一个元素,就是China,然后赋值给str,此时状态是这样的

image

所以别忘了加上it.next(); 移动一下游标,不然会陷入死循环,就像这样

package collect;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class myiterator {
public static void main(String[] args) {
     List<String> list =new ArrayList<String>();
     list.add("China");
     System.out.println("list.addChina后:"+list);
     list.add("hello");
     System.out.println("list.addhello后:"+list);
     Iterator<String> it =list.iterator();
     System.out.println(list.size());
     System.out.println(it);
     int i = 0;
     while (it.hasNext()) {
        
         ++i;
        System.out.println("运行第"+i+"次");
    
        
    }
}
}
运行结果
运行第203869次
运行第203870次
运行第203871次
运行第203872次
运行第203873次
运行第203874次
。。。。。

一直向下执行,陷入死循环,不停止

int i = 0,j=0;
     while (it.hasNext()) {
        String str=it.next();
         ++i;
        System.out.println("运行第"+i+"次");
        System.out.println(str);
        System.out.println(list.get(j++));
    }

还可以这样,结果

list.addChina后:[China]
list.addhello后:[China, hello]
2
java.util.ArrayList$Itr@15db9742
运行第1次
China
China
运行第2次
hello
hello

再明显一点

int i = 0,j=0;
     while (it.hasNext()) {
        it.next();
         ++i;
        System.out.println("运行第"+i+"次");
        System.out.println(list.get(j++));
    }

结果

list.addChina后:[China]
list.addhello后:[China, hello]
2
java.util.ArrayList$Itr@15db9742
运行第1次
China
运行第2次
hello
因为ArrayList底层是动态数组,所以从0, list.get(0 ));开始
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值