2013-05-21 114 views
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 

我需要能夠從某一陣列組拉的數據集,例如(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實現要做到這一點,這將使數組值鏈接回舊版本的陣列中;或者我將不得不克隆整個數組,並更改我需要更改的值? (加上存在令人討厭的內存缺陷)

+3

100個200個數組每個都不是那麼多的內存。你在電話或嵌入式? – Thilo

+1

我懷疑你可能在「循環緩衝區」上搜索一些運氣 – Floris

+0

@Thilo - 它運行在Android上,所以手機/平板電腦。所以沒有太多的RAM或處理能力。這兩個我都希望成爲一個問題。 –

回答

1

您需要的陣列總數是固定的,因此您可以預先分配它們。使用計數器指定當前數組並循環。

您無法避免使用此內存,但可以避免不斷重新分配新陣列。有一些複雜的數據結構可以讓你保存'不變'的內存,但是對於這種情況,似乎只是將它全部保存在固定數量的現有陣列中就足夠了。

我會始終保持數組中的實際值,因此在更新期間,您可以複製舊值並覆蓋已更改的值。

如果您需要知道current_array [i]是否因old_array [i]而改變,您可以隨時進行快速比較。