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

标签 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;
}

关于如何提高效率的任何想法?比如有什么办法可以避免内存拷贝?

最佳答案

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

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

关于java - 在Java中从一维数组快速转换为二维,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8629202/

相关文章:

java - 索引越界异常

java - Java 中一个函数等待另一个函数

java - 如何使用 Postman 从curl 发布 REST

java - 从匿名类访问阴影变量

php - 遍历具有重复记录的 PHP 数组并删除值 = 0 的一条记录

javascript - 如何向 angularjs 中的对象数组添加属性

c# - 如何为 Windows Phone 7 解析以下 JSON?

c++ - 生成数独谜题所需的时间

javascript - 具有大量数据的 JSON/jQuery 性能

Java:并发读取 InputStream