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

我必须每秒存储大约 20 个数组集,在过去 5 秒内返回。
因此,内存中有 100 个数组集。

每个数组集将包含大约 200 个值;所以这将相当于相当大的内存消耗。

我对你的问题:

是否已经有一个 Java 实现可以做到这一点,这将允许数组值链接回数组中的旧版本;还是我必须克隆整个数组并更改我需要更改的值?(加上遭受令人讨厌的记忆缺陷)

4

1 回答 1

1

您需要的数组总数是固定的,因此您可以预先分配它们。使用计数器指定当前数组并循环遍历。

您无法避免使用此内存,但可以避免不断重新分配新数组。有一些复杂的数据结构可以让您保存“未更改”的内存,但对于这种情况,似乎只需将其全部保存在固定数量的现有数组中就足够了。

我会始终将实际值保留在数组中,因此在更新期间您可以复制旧值并覆盖已更改的值。

如果您需要知道 current_array[i] 是否相对于 old_array[i] 发生了变化,您可以随时进行快速比较。

于 2013-05-21T11:52:39.990 回答