java性能优化读书笔记之三《程序优化===优化集合访问代码》

时间:2023-01-03 21:30:27

实例

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));
}

}

性能比较结果图
java性能优化读书笔记之三《程序优化===优化集合访问代码》