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。
public boolean hasNext() { //如果游标<list的大小,则说明还有下一个 if (cursor<list.size()) { return true; } return false; }
当前游标0<list.size(),也就是0<2,返回true,进入while循环,接着it.next(); 这时游标往下走一个,并且返回迭代的下一个元素,就是China,然后赋值给str,此时状态是这样的
所以别忘了加上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