实例
package org.com.program.data;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
/**
* <p>分离循环中被重复调用的代码</p>
* <p>省略相同的步骤</p>
* @author jian.liu
*
*/
public class CollectionProgram03 {
private long startTime;
private long endTime;
//1、分离for中被重复调用的代码 :size方法未分离
@Test
public void repeatMethodBefor() {
List<String> list = new ArrayList<String>();
for(int i=0; i<3000000; i++) {
list.add("abc"+i);
}
startTime = System.currentTimeMillis();
for(int i=0; i<list.size(); i++) {
if(list.get(i).indexOf("abc1") !=-1
||list.get(i).indexOf("abc2") !=-1
||list.get(i).indexOf("abc3") !=-1) {
}
}
endTime = System.currentTimeMillis();
System.out.println("repeat method befor to time{}:"+(endTime-startTime));
}
//1、分离for中被重复调用的代码 :size方法分离
@Test
public void repeatMethodAfter() {
List<String> list = new ArrayList<String>();
for(int i=0; i<3000000; i++) {
list.add("abc"+i);
}
startTime = System.currentTimeMillis();
//size方法从for分离
int size = list.size();
for(int i=0; i<size; i++) {
if(list.get(i).indexOf("abc1") !=-1
||list.get(i).indexOf("abc2") !=-1
||list.get(i).indexOf("abc3") !=-1) {
}
}
endTime = System.currentTimeMillis();
System.out.println("repeat method after to time{}:"+(endTime-startTime));
}
//1、分离for中被重复调用的代码 :1.size方法分离 2.省略相同的部分
@Test
public void repeatMethodAfter02() {
List<String> list = new ArrayList<String>();
for(int i=0; i<3000000; i++) {
list.add("abc"+i);
}
startTime = System.currentTimeMillis();
String str= "";
//size方法从for分离
int size = list.size();
for(int i=0; i<size; i++) {
//(str= (String)list.get(i) 此行代码省略相同的部分
if((str= (String)list.get(i)).indexOf("abc1") !=-1
||str.indexOf("abc2") !=-1
||str.indexOf("abc3") !=-1) {
}
}
endTime = System.currentTimeMillis();
System.out.println("repeat method and stripping repeatafter to time{}:"+(endTime-startTime));
}
}
性能比较结果图