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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.util.*;

class GenericDemo6
{
        public static void main(String[] args)
        {
                ArrayList<String> al=new ArrayList<String>();
                al.add("abc1");
                al.add("abc2");
                al.add("abc3");
                al.add("abc4");
                coll(al);
                ArrayList<String> al1=new ArrayList<String>();
                al1.add("abc____1");
                al1.add("abc____2");
                al1.add("abc____3");
                al1.add("abc____4");
                coll(al1);
        }
        public static void sop(Object o)
        {
                System.out.println(o);
        }
        public static void coll(ArrayList<?> al)
        {
                for (Iterator<?> it=al.iterator();it.hasNext() ; )
                {
                        System.out.println(it.toString());
                }
        }
}
System.out.println(it.next().toString());
开始少了红色的it.next().

结果是:java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
一直不断重复。请问什么原理!

5 个回复

倒序浏览
郑苑东 来自手机 中级黑马 2012-4-12 08:37:25
沙发
指针一开始指向第一个的前面,没有next就会一直打印那个得地址,形成死循环。不会指向集合里面的第一个,自然也没有后面的。而第一个的类型就是小老鼠前面的,后面的是地址。
回复 使用道具 举报
it.next()是只进只读,前进一次就让it.hasNext()判断一次,读到没数据,it.hasNext()就为false,循环就停止了。而你没有加it.next()去遍历数组; it.hasNext()一直都处于true的状态,一直反复下去,就成死循环,就是出现你所说的这种状况。
回复 使用道具 举报
  System.out.println(it.next().toString()); 应该放到for循环里面返回迭代的下一个元素。
  而你 System.out.println(it)是循环迭代器,找不到具体元素,所以出现死循环。
回复 使用道具 举报
for (Iterator<?> it=al.iterator();it.hasNext() ; )       //判断是否有下一个元素,有返回true,
                {
                        System.out.println(it.toString());   
                }
你原来那样做他不取值,不取就当还有,当然一直循环了。。。
所以你要加上it.next方法 返回下一个元素,可以通过重复调用此方法,直到hasNext()方法返回false,从而可以将集合中的所有元素遍历一次.
回复 使用道具 举报
3Q3Q3Q3Q3Q3Q
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马