java ArrayList初始容量性能影响

时间:2018-01-30 17:07:58

标签: java performance arraylist

我在我的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代码)。

谢谢!

0 个答案:

没有答案