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

3
我需要在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;
}

有没有什么方法可以使这更有效率?例如,有没有办法避免内存复制?

有没有办法避免内存复制?没有。 - Thilo
1个回答

3

我认为你已经实现了最快的解决方案,因为你使用了System.arraycopy()。只要你使用数组,这就是最快的解决方案。

但是,如果性能是真正的问题,并且你可以从数组切换到集合或列表,你可以实现更好的方案。你可以实现自己的集合,使用一维数组,行为类似于二维集合。


谢谢,我刚写完问题就想到了一个点子。那很可能是实现它的最简单方法。 - Yrlec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接