for 循环的使用技巧

for 循环的使用技巧

在程序设计中,经常要进行程序流程的控制,而在此过程中经常用到的就是for循环语句。for循环是编程语言最基本的内容,在最开始学习编程的时候就会学到,也是在编程过程中经常使用的。

这是一个很熟悉的内容,但是如何使用for循环使程序的效率更高。本文所要讲述的也就是在编程过程中for循环的一些使用技巧以及要注意的地方。

for循环的基本结构:

       for( 初始化表达式;判断表达式;递增(递减)表达式){

           执行语句;

       }

这是for循环最基本的结构,也是一个完整的结构。在编程的过程中可以根据自己的需要灵活的使用for循环的其他的变形结构。

以下是for循环的几种常用结构:

       // for循环的几种结构

       for( int i = 0; i < 10; i++ ){

           // do something

       }

 

       for( int i = 0; i < 10; ){

           // do something

           i++;

       }

 

       for( int i = 0;; i++ ){

           if( i < 10 )

              break;

           // do something

       }

 

       int i = 0;

       for( ; i < 10; i++ ){

           // do something

       }

 

       for( int j = 0;; ){

           if( j < 10 )

              break;

           // do something

           j++;

       }

 

       for( ; i < 10; ){

           // do something

           i++;

       }

 

       for( ;; i++ ){

           if( i < 10 )

              break;

           // do something

       }

 

       for( ;; ){

           if( i < 10 )

              break;

           // do something

           i++;

       }

虽然for循环可以写成很多种的结构形式,但是一个for循环执行的基本流程是不变的。

for循环执行的基本流程:

第一步:执行初始化表达式。这个在整个for循环中只执行一次。

第二步:执行判断表达式。在每一次循环中都会执行,如果表达式为false,则结束循环。

第三步:执行递增(递减)表达式。这个在每一次循环的最后执行。

       以上只是for循环的基本流程,具体的还要取决于你所书写的for循环的结构而定。

那么for循环在使用中有那些技巧呢?以下只是个人在开发使用中总结的一些内容。

for 循环的使用技巧

1、不要在判断表达式中使用方法调用

       来看下面这个例子:

ArrayList<Object> list = new ArrayList<Object>( );

       for( int i = 0; i < list.size( ); i++ ){

           // do something

           }

这个在编程的过程中,我们可能会经常这样写。这个for循环看起来很简洁也很清楚,但是这样有什么不好呢?

看一下它的判断表达式i < list.size( ),我们知道for循环的判断表达式在每一次的循环中都会执行一次,那么list.size( )这个方法的调用每一次也都要执行,这无形中就降低了程序的效率了,也是完全没有必要的。

我们不妨把它改成下面这个例子:

ArrayList<Object> list = new ArrayList<Object>( );

       for( int i = 0, listSize = list.size( ); i < listSize; i++ ){

           // do something

       }

这里只是把list.size( )这个方法的调用放到了for循环的初始化表达式中,因为for循环的初始化表达式是只执行一次而已。

需要注意的一点是,在for循环的初始化表达式中是可以初始化多个变量的,在递增(递减)表达式中也可以有多个表达式,要以逗号间隔,而不是用分号。

如下面的例子:

       for(int i=0, j=1, k=2; i<5 || j>6 && k<8; i++, j--, k=i+j){

           // do something

       }

如果你的JDK版本比较高的话,也可以用以下for循环的高级版本

ArrayList<Object> list = new ArrayList<Object>( );

       for( Object object: list ){

           // do something

       }

2、不要在循环中创建临时对象

来看下面的这个例子:

for( int i = 0; i < 8888; i++ ){

           Object object = new Object( );

           // do something

       }

从循环中可以看到,在每次执行for循环都要创建一个Object的临时对象,而创建一个对象就要占用一定的内存空间,虽然java有垃圾回收机制,但是这也是会在内存中存在很长时间的。

我们不妨把它改成下面这个例子:

       Object obj = null;

       for( int i = 0; i < 8888; i++ ){

           obj = new Object( );

           // do something

       }

虽然也是在每一次的循环中都实例化一个对象,但是在内存中只保存一份对象的引用,而没有创建大量新的临时对象.从而降低了内存的使用

3、不要把与循环无关的流程放到for循环中执行

我们来看个简单的例子:

       int a = 5;

       int b = 8;

       double[] d = new double[10];

       for( int i = 0; i < 10; i++ ){

           d[i] = d[i] / ( a * b );

       }

我们不妨把它改成下面这个例子:

       int a = 5;

       int b = 8;

       int c = a * b;

       for( int i = 0; i < 10; i++ ){

           d[i] = d[i] / c;

       }

两个例子的对比,可以很清楚的看到,在第二个循环中把 ( a * b ) 放到了for循环的外部,也就只执行了一次。这里只是一个简单的表达式运算,如果是更多的执行语句,那么程序的效率也就会提高更多了。

4、不要让你的for循环变成死循环或者不循环

看下面的例子:

       for( int i = 0; i > 10; i++ ){

           // 不循环

       }

       for( int i = 0; i < 10; i-- ){

           // 死循环

       }

这些主要都是符号的书写错误造成的,只要在编程的注意检查自己的代码就可以。而且这种错误在程序单元测试的时候就很容易发现了。

5、不要让你的for循环执行不完全

来看一个例子:

       ArrayList<Object> list = new ArrayList<Object>( );

       for( int i = 1, listSize = list.size( ); i < listSize; i++ ){

           // do something

       }

在初始化表达式中i=1,list的索引的从0开始的,这样就少了一个值取不到了,而且这种错误是不容易被发现的,因为程序不会报错,所以要特别注意。

也不要写成下面这种:

       ArrayList<Object> list = new ArrayList<Object>( );

       for( int i = 0, listSize = list.size( ); i <= listSize; i++ ){

           // do something

       }

判断表达式中i <= listSize使用了等于号,这将会产生下标的越界。

这些主要是在使用for循环的时候,注意循环的边界值,看自己什么时候需要从0开始循环,什么时候需要用等号,就不会出错了。

以上只是自己的一些总结,以后有更多的再补上。希望能给你的编程带来些帮助,也能提高你程序的运行效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值