0

「歴史的な」配列参照を必要とするタスクに取り組みました。
これが正しい名前かどうかはわかりません。
これは、視覚的な形での簡単な概念です。

[NC] == No change to array value

(v1)        (v2)        (v3)        (v4)    (Result)
[10]    ->  [13]    ->  [12]    ->  [13]        = 13
[5]     ->  [NC]    ->  [54]    ->  [NC]        = 54
[6]     ->  [3]     ->  [61]    ->  [30]        = 30
[7]     ->  [3]     ->  [27]    ->  [3]         = 3
[23]    ->  [NC]    ->  [NC]    ->  [NC]        = 23
[41]    ->  [48]    ->  [4]     ->  [48]        = 48
[12]    ->  [NC]    ->  [2]     ->  [NC]        = 2

たとえば、特定の配列セットからデータセットを取得できる必要があります (疑似コード):

int[] results1 = arraySet.get(v2);
System.out.println(results1[1]); // Prints 5

int[] results2 = arraySet.get(v4);
System.out.println(results2[1]); // Prints 54

1 秒間に約 20 個の配列セットを保存する必要があり、過去 5 秒間戻ってきます。
したがって、100 個の配列セットがメモリに格納されます。

各配列セットには約 200 の値が含まれます。したがって、これは非常に大きなメモリ消費になります。

あなたへの私の質問:

これを行うための Java 実装が既にありますか?これにより、配列値を配列内の古いバージョンにリンクすることができます。または、配列全体のクローンを作成し、変更する必要がある値を変更する必要がありますか? (さらに、厄介なメモリの欠点があります)

4

1 に答える 1

1

必要な配列の総数は固定されているため、事前に割り当てることができます。カウンターを使用して現在の配列を指定し、循環します。

このメモリの使用を避けることはできませんが、常に新しい配列を再割り当てすることは避けることができます。「変更されていない」メモリを保存できる複雑なデータ構造がいくつかありますが、この場合、固定数の既存の配列にすべてを保持するだけで十分なようです。

私は常に実際の値を配列に保持するので、更新中に古い値をコピーして、変更された値を上書きすることができます。

current_array[i] が old_array[i] に対して変更されたかどうかを知る必要がある場合は、いつでも簡単に比較できます。

于 2013-05-21T11:52:39.990 に答える