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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐巍 黑马帝   /  2012-3-19 01:53  /  1713 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请看代码:
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);
        }
}

7 个回复

倒序浏览
没见过第二种用法,第二种每次循环都要执行一遍Iterator it=al.iterator();
回复 使用道具 举报
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);
        }
}
回复 使用道具 举报
1.   相比较而言第二种更好。但是貌似人们更习惯用第一种
2.   两种效率都是一样的,只是第一种当循环结束后,Iterator的对象it还在内存中,浪费资源。它是等待垃圾回收机制回收的。而第二种,当循环结束后,它就自动释放内存了
回复 使用道具 举报
这是循环语句的知识——while循环与for循环的区别:
1:for(初始值;循环条件;循环后的操作){执行语句}
2:  a: 初始化动作;
     b: while(循环条件){执行语句}
两者的区别:
1,结构上:for把初始化动作放到了自己身上;而while把初始化动作放在自己外面;
2,需求上:如果初始化动作产生的代码还需要为下面的其他执行语句使用,那么就应该把资源放出来,使用while循环,否则就放在自己身上,完成循环后一起带走,以免消化内存空间。
回复 使用道具 举报
毕老师在视频里有讲过这个问题 第一种国内比较常用,老外比较喜欢用第二种,因为for循环完了it就自动释放了
回复 使用道具 举报
这是获取迭代器的两种方式,前者比较符合人们的习惯,后者比较优化。
前者循环完之后对象还在内存中,就空间来说是一种浪费
而后者变量定义在局部位置,使用完后,会自动被释放
回复 使用道具 举报
我喜欢第一种,迭代器可以多次使用,写个循环参数里面去虽然省资源 但是万一又想用呢 超出了他语句块就不好用了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马