黑马程序员技术交流社区

标题: 加强for循环 [打印本页]

作者: vipzh    时间: 2012-12-1 12:15
标题: 加强for循环
什么是加强for循环?给个例子
作者: 孙玉伟    时间: 2012-12-1 12:21
增强for循环相对于传统的for循环在集合遍历来的更效率,其内部也是调用迭代实现的。
下面举个例子:
    public class Test{
public static void main(String[] args)
{
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 5000000; i++)
{
list.add(11);
}
long start = System.currentTimeMillis();
int size = list.size();
int c1 = 1;
for (int i = 0; i < size; i++)
{
c1 = list.get(i);
}
System.out.println("for + get(i)方法: " + (System.currentTimeMillis() - start));
long start2 = System.currentTimeMillis();
for (int c2 : list)
{
}
System.out.println("Iterator(foreach)方法:" + (System.currentTimeMillis() - start2));
}
}
结果:
for + get(i)方法: 94
Iterator(foreach)方法:234
在把ArrayList改为LinkedList,我这里内存溢出了,于是list改成50000
结果:
for + get(i)方法: 6969
Iterator(foreach)方法:0
作者: ljhheima    时间: 2012-12-1 12:47
格式:for(类型名 对象名:数组或集合)
作用:遍历数组或集合中所有元素
作者: 彭璞    时间: 2012-12-1 16:03
/*for增强格式:for(type 变量名:集合变量名){...}

* 缺点:对于数组,不能方便的访问下标值;

* 对于集合,与使用interator相比,不能方便的删除集合中的内容(在内部也是调用interator);

* 出了简单遍历并读取其中的内容外,不建议使用怎强的for循环;

* 用法:一遍历数组

* for(Type value:array){

* expression value;

* }

* 以前我们这样写:

* void someFunction(){

* int[] array={1,2,3,4};

* int total=0;

* for(int i =0;i<array.length;i++)

* {

* total+=array;                  

* }

* System.out.println(total);        显然:for/in(for each)循环自动控制一次遍历数组中的

* 现在只要这样写               然后将它赋值给一个临时变量(如int n),然后再循环体中可直接对

* void someFunction(){              此临时变量进行操作。这种循环缺点是:

* int[] array ={1,2,3,4};           1.只能顺次遍历所有元素,无法实现复杂循环,如退回之前遍历过的元素

* int total = 0;                    2.循环变量i不可见,不能知道循环到第几个元素

* for(int n:array){

* total+=n;

* }

* System.out.println(total);

* }

*

* 二:遍历集合

* 语法: for(Type value:Iterable){   for/in循环遍历的集合必须是实现Iterable接口的

* expression value;

* }

* 以前这样写:

* void someFunction(){

* List list = new ArrayList();

* list.add("hello");

* list.add("hello");

* list.add("hello");

* String s = "";

* for(Iterator iter = list.iterator();iter.hasNext();)

* {

*  String temp = (String)iter.next();

*  s += temp;

* }

* System.out.println(s);

* }

* 现在这样写

* void someFunction(){

* List list = new ArrayList();

* list.add("hello");

* list.add("hello");

* list.add("hello");

* String s = "";

* for(Object o :list)

* {

* String temp = (String) o;

* s+=temp;

* }

* System.out.println(s);

* }

* 结合泛型就更简单

* void someFunction(){

* List list = new ArrayList();

* list.add("hello");

* list.add("hello");

* list.add("hello");

* String s = "";

* for(String temp:list)

* {

* s +=temp;省去了对强制类型转换步骤

* }

* System.out.println(s);}

* 以上代码会被编译器转化为:

* void someFunction(){

* List list = new ArrayList();

* list.add("hello");

* list.add("hello");

* list.add("hello");

* String s = "";

* for(Iterator iter = list.iterator();iter.hasNext();)

* {

* String temp = iter.next();

* s += temp;

* }

* System.out.println(s);

* }

*

* 在这种操作中,Iterator是不可见的,所以需要调用Iterator.remove()方法。

* 所以for增强方法可以提高代码简洁行,是更方便,但是也有局限性,要选择使用;

* */





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