黑马程序员技术交流社区
标题:
关于迭代器的问题
[打印本页]
作者:
唐巍
时间:
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