我在我的java应用程序中有一个循环,它将对象数组添加到列表中
List<Object[]> list = new ArrayList<Object[]>();
我注意到,不提供初始容量实际上比提供容量更快。
我有23秒对15秒的差异。
我已经创建了这个虚拟JUnit测试来模拟它并且相差6秒和6.7秒的差异,支持NO初始容量:
@Test
public void asdf() {
int rowSize = 20;
int rowCount = 10000000;
// DATA PREP
int[][] matrix = new int[rowCount][];
for (int i=0; i< matrix.length; i++) {
matrix[i] = new int[rowSize];
for (int j=0; j< rowSize; j++) {
matrix[i][j] = (int) (Math.random()*10);
}
}
BiFunction<Integer, Integer, Object> getValue = new BiFunction<Integer, Integer, Object>() {
@Override
public Object apply(Integer row, Integer col) {
return matrix[row][col];
}
};
//END DATA PREP
long start = System.currentTimeMillis();
// THIS IS THE DIFFERENCE!!!!
//List<Object[]> lst = new ArrayList<>(rowCount);
List<Object[]> lst = new ArrayList<>();
for (int i = 0; i < rowCount; i++) {
Object[] row = new Object[rowSize];
for (int j = 0; j < rowSize; j++) {
row[j] = getValue.apply(i, j);
}
lst.add(row);
}
long totalTime = System.currentTimeMillis() - start;
System.out.println(totalTime);
}
它有什么意义?
我知道这个代码通常是废话,它只是试图模仿我的真实案例,读取结果集(而不是jdbc代码)。
谢谢!