黑马程序员技术交流社区

标题: 关于迭代器的问题 [打印本页]

作者: 唐巍    时间: 2012-3-19 01:53
标题: 关于迭代器的问题
请看代码:
import java.util.*;
class CollectionDemo2
{
        public static void main(String[] args)
        {
                ArrayList<String> al=new ArrayList<String>();
                al.add("wanglin01");
                al.add("wanglin02");
                al.add("wanglin03");
                al.add("wanglin04");
                //第一种获取迭代器的方式。
                Iterator it=al.iterator();
                while(it.hasNext())
                {
                        sop(it.next());
                }
                //第二种获取迭代器的方式。
                /*for(Iterator it=al.iterator();it.hasNext();)
                {
                        sop(it.next());
                }
                                */
                //这两种获取迭代器的方式有什么不同?哪一种更好?
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
}

作者: 王思兰    时间: 2012-3-19 01:58
没见过第二种用法,第二种每次循环都要执行一遍Iterator it=al.iterator();
作者: 贠(yun)靖    时间: 2012-3-19 02:02
import java.util.*;
class CollectionDemo2
{
        public static void main(String[] args)
        {
                ArrayList<String> al=new ArrayList<String>();
                al.add("wanglin01");
                al.add("wanglin02");
                al.add("wanglin03");
                al.add("wanglin04");
                //第一种获取迭代器的方式。创建了一个it对象  当循环结束的时候it对象还在内存中 浪费资源  该对象存储在堆内存中,有系统回收期回收
                Iterator it=al.iterator();
                while(it.hasNext())
                {
                        sop(it.next());
                }
                //第二种获取迭代器的方式。it对象是在局部变量中,for循环结束,it所占用的内存空间就被自动释放,推荐使用这种方式迭代
                /*for(Iterator it=al.iterator();it.hasNext();)
                {
                        sop(it.next());
                }
                                */
                        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
}

作者: 李飞    时间: 2012-3-19 09:54
1.   相比较而言第二种更好。但是貌似人们更习惯用第一种
2.   两种效率都是一样的,只是第一种当循环结束后,Iterator的对象it还在内存中,浪费资源。它是等待垃圾回收机制回收的。而第二种,当循环结束后,它就自动释放内存了
作者: OMG    时间: 2012-3-19 11:50
这是循环语句的知识——while循环与for循环的区别:
1:for(初始值;循环条件;循环后的操作){执行语句}
2:  a: 初始化动作;
     b: while(循环条件){执行语句}
两者的区别:
1,结构上:for把初始化动作放到了自己身上;而while把初始化动作放在自己外面;
2,需求上:如果初始化动作产生的代码还需要为下面的其他执行语句使用,那么就应该把资源放出来,使用while循环,否则就放在自己身上,完成循环后一起带走,以免消化内存空间。
作者: foxpeter    时间: 2012-3-19 12:06
毕老师在视频里有讲过这个问题 第一种国内比较常用,老外比较喜欢用第二种,因为for循环完了it就自动释放了
作者: 刘元明    时间: 2012-3-19 12:36
这是获取迭代器的两种方式,前者比较符合人们的习惯,后者比较优化。
前者循环完之后对象还在内存中,就空间来说是一种浪费
而后者变量定义在局部位置,使用完后,会自动被释放
作者: 泮和顺    时间: 2012-3-19 13:14
我喜欢第一种,迭代器可以多次使用,写个循环参数里面去虽然省资源 但是万一又想用呢 超出了他语句块就不好用了




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