我接触过一项需要“历史”数组引用的任务
不确定这个名字是否正确。
这是一个视觉形式的快速概念。
[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实现来执行此操作,这将允许数组值链接回数组中的旧版本;或者我是否必须克隆整个数组,并更改我需要更改的值? (再加上令人讨厌的记忆缺点)
答案 0 :(得分:1)
您需要的阵列总数是固定的,因此您可以预先分配它们。使用计数器指定当前阵列并循环。
您无法避免使用此内存,但可以避免不断重新分配新阵列。有一些复杂的数据结构允许您保存“未更改”的内存,但在这种情况下,似乎只需将它保存在固定数量的现有数组中就足够了。
我会始终在数组中保留实际值,因此在更新期间,您只需复制旧值并覆盖已更改的值。
如果您需要知道current_array [i]是否因old_array [i]而改变,您可以随时进行快速比较。