list.size() 方法频繁调用性能测试 优化程序结构,尽量减少方法的重复调用
一、问题描述
1、如下图,可以理解为频繁调用list.size() 方法的性能问题。(这里)
二、代码测试如下
1、ListSizeTest 类,如下:
/**
* 初始化List的数量
*/
int count = 5000000;
/**
* description: 频繁调用重复方法
* @return void
* @version v1.0
* @author w
* @date 2021年4月25日 上午9:09:07
*/
@Test
public void test() {
List<String> list = init(count);
long start = System.currentTimeMillis();
for (int i = 0; i < list.size(); i++) {
if(i % 10 == 9) {
System.out.println(list.get(i));
}
}
System.out.println("频繁调用重复方法耗时 \t"+(System.currentTimeMillis() - start)+" :ms");
}
/**
* description: 不频繁调用重复方法
* @return void
* @version v1.0
* @author w
* @date 2021年4月25日 上午9:10:18
*/
@Test
public void test2() {
List<String> list = init(count);
long start = System.currentTimeMillis();
for (int i = 0 , size =list.size(); i < size; i++) {
if(i % 10 == 9) {
System.out.println(list.get(i));
}
}
System.out.println("频繁调用重复方法耗时22 \t"+(System.currentTimeMillis() - start)+" :ms");
}
@Test
public void test3() {
List<String> list = init(count);
long start = System.currentTimeMillis();
int size =list.size();
for (int i = 0 ; i < size; i++) {
if(i % 10 == 9) {
System.out.println(list.get(i));
}
}
System.out.println("频繁调用重复方法耗时33 \t"+(System.currentTimeMillis() - start)+" :ms");
}
private List<String> init(int count) {
ArrayList<String> res = new ArrayList<String>();
for (int i = 0; i < count ; i++) {
res.add(i+"");
}
return res ;
}
2、分别运行 test1-3;耗时如下:1400ms、1368ms、1358ms;
三、总结
1、大量数据情况下,频繁调用 list.szie()方法,会造成一定的性能损耗; 可以将 list.size()方法,赋值到单独变量中,避免频繁调用,以达到提升性能的效果。
2、使用test3方法,赋值到单独的变量中,效率最高。 int size =list.size();