2011-12-25 83 views
3

我需要在Java中儘可能快地將long []轉換爲long [] []。 long []可能不完全對應於long [],在這種情況下,我將空行添加到long []。在Java中快速從一維數組向二維轉換

當前的代碼看起來是這樣的:

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

如何使這個更高效的任何想法?例如,有沒有辦法避免內存拷貝?

+0

「有什麼方法可以避免內存拷貝」。編號 – Thilo 2011-12-25 10:28:34

回答

3

我認爲您已經實施了最快的解決方案,因爲您使用System.arraycopy()。在使用數組之前,這是最快的解決方案。

但是,如果性能是實際問題在這裏,你可以從數組切換到集合或列表,你可以做更好的實現。您可以實現您自己的使用一維數組的集合並表現爲二維集合。

+0

謝謝,我只是在寫完問題後有想法的時刻。這可能是實現它的最簡單方法。 – Yrlec 2011-12-25 12:08:25