在Java中从一维数组快速转换为二维数

时间:2011-12-25 10:24:33

标签: java arrays performance

我需要在Java中尽快将long []转换为long [] []。 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 个答案:

答案 0 :(得分:3)

我认为您使用System.arraycopy()后已经实施了最快的解决方案。在使用数组之前,这是最快的解决方案。

但如果性能是真正的问题,您可以从数组切换到集合或列表,那么您可以更好地实现。您可以实现自己的集合,该集合使用一维数组并表现为二维集合。