Быстрое преобразование из одномерного массива в двухмерный в Java - PullRequest
3 голосов
/ 25 декабря 2011

Мне нужно как можно быстрее преобразовать long [] в long [] [] в Java.Long [] может не полностью соответствовать long [], и в этом случае я добавляю пустые строки в long [].

Текущий код выглядит следующим образом:

private long[][] convertOneDimensionalToTwoDimensional(int numberOfRows, int rowSize, long[] srcMatrix) {
    int srcMatrixLength = srcMatrix.length;
    int srcPosition = 0;

    long[][] returnMatrix = new long[numberOfRows][];
    for (int i = 0; i < numberOfRows; i++) {
        long[] row = new long[rowSize];
        int nextSrcPosition = srcPosition + rowSize;
        if (srcMatrixLength >= nextSrcPosition) {
            // Copy the data from the file if it has been written before. Otherwise we just keep row empty.
            System.arraycopy(srcMatrix, srcPosition, row, 0, rowSize);
        }
        returnMatrix[i] = row;
        srcPosition = nextSrcPosition;
    }
    return returnMatrix;
}

Есть идеи, как сделать это более эффективным?Например, есть ли способ избежать копирования в память?

1 Ответ

3 голосов
/ 25 декабря 2011

Я думаю, что вы реализовали самое быстрое решение, так как используете System.arraycopy(). Это самое быстрое решение, пока вы не используете массивы.

Но если производительность является реальной проблемой здесь, и вы можете переключаться с массивов на коллекции или списки, вы можете добиться лучшей реализации. Вы можете реализовать свою собственную коллекцию, которая использует одномерный массив и ведет себя как двумерная коллекция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...