2011-12-25 26 views
3

Javaでlong []をlong [] []にできるだけ早く変換する必要があります。 long []はlong []に完全に対応していない可能性があり、その場合は空の行をlong []に追加します。1次元配列からJavaの2次元への高速変換

現在のコードは次のようになります。これは、より効率的にする方法について

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

"メモリコピーを避ける方法はありますか?" No. – Thilo

答えて

3

System.arraycopy()を使用しているので、あなたが最も速い解決策を実装したと思います。これは、配列を使用するまでは最速の解決方法です。

パフォーマンスが実際の問題で、アレイからコレクションまたはリストに切り替えることができます。 1次元配列を使用し、2次元コレクションとして動作する独自のコレクションを実装できます。

+0

ありがとう、私はちょうど質問を書いた後、アイデアを思いついた。おそらくそれを達成する最も簡単な方法です。 – Yrlec

関連する問題