历史数组

时间:2013-05-21 11:46:10

标签: java arrays

我接触过一项需要“历史”数组引用的任务 不确定这个名字是否正确。
这是一个视觉形式的快速概念。

[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

我需要能够从某个数组中提取数据集,例如(psudo代码):

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实现来执行此操作,这将允许数组值链接回数组中的旧版本;或者我是否必须克隆整个数组,并更改我需要更改的值? (再加上令人讨厌的记忆缺点)

1 个答案:

答案 0 :(得分:1)

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

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

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

如果您需要知道current_array [i]是否因old_array [i]而改变,您可以随时进行快速比较。