0

Javaでは、多次元配列を使用すると大幅に遅くなるようです。-

int[] oneDArray=new int[3000*3000];
int[][] twoDArray=new int[3000][3000];

for(int x=0;x<oneDArray.length;x++){
   oneDArray[x]=x;
}



for(int x=0;x<twoDArray.length;x++){
    for(int y=0;y<twoDArray[0].length;y++){
        twoDArray[x][y]=x;
    }
}

結果は次のとおりです。1dには4ミリ秒かかり、2dには15ミリ秒かかります。これは、グラフィック機能を実行するときにかなりの遅延になります。

Javaで単一の配列のみを使用して2D座標を表すにはどうすればよいですか?

4

5 に答える 5

5
int w = 3000;
int h = 3000;

int[] array = new int[w * h];

/* Here is how to calculate the index for a specific (x, y) */
int index = y * w + x;

array[index] = 5;
于 2013-02-08T13:22:11.023 に答える
1

2Dデータを表すために1次元配列を使用することは非常に一般的です。たとえば、次のようにインデックスを変換できます。

1Dindex = xIndex + IMAGE_WIDTH*yIndex
于 2013-02-08T13:22:23.570 に答える
1

oneDArray[x*3000 + y]すべての行が同じ長さである長方形の配列の場合、長方形の位置(x、y)に値を保持する規則を使用するだけです。

于 2013-02-08T13:22:25.907 に答える
0

オプション1:

ペアオブジェクトの1D配列を使用するPair[]

class Pair {
  int x;
  int y;
}

オプション2:

1Dと2Dの間で算術変換を使用します。たとえば、次元が100*200の場合。

それでa[i, j] = a[i * 200 + j]

于 2013-02-08T13:24:17.107 に答える
0

座標を混合するようなことをして配列を線形化するのはどうですか?配列のすべての偶数要素はxに関係し、奇数要素はyに関係する可能性があります。ペアで選ぶと、さらに書きやすくなります。

このようなもの:

x = [x1, x2, x3, x4, ..... , x3000] 
y = [y1, y2, y3, y4, ..... , y3000]

次のようなものに置き換えます。

data = [x1, y1, x2, y2, x3, y3, x4, y4, ...... , x3000, y3000]

次に、これからすべての偶数要素を選択してxを取得し、奇数要素を選択してyを取得できます。これの1つのボーナスは、次のようなことができることです。

coord (point in position i) = [data [2i], data[2i+1]] 

点iの座標を持ち帰ります。

それ以外の場合は、他の人が示唆しているように、最初にすべてのxsを実行し、次にysを実行することによって配列を線形化することに絶対に同意します。

于 2013-02-08T13:24:31.423 に答える