2014-09-13 21 views
-1

我有一個項目,我正在處理單元格的二維數組,我目前正在使用布爾型[240] [135] 數組,這是32k元素左右的某處(當我切割單元格大小時一半)。我想創建一個CellMap類,它使用一組BitSet來存儲這些信息。我已經想過創建一個Byte [],並將值0或1設置爲true/false,但是對於每個條目來說,這是7位浪費的空間。以及布爾值可以以各種方式存儲的事實取決於VSM,布爾陣列在內存上看起來更糟,然後是字節數組。如何創建一個BitSet對象數組?

我能想到的唯一的其他選擇是創建一個類,它將信息存儲在兩種類型的btye數組中。壓縮和臃腫。在壓縮的字節數組中,每一位代表布爾真/假。在臃腫的字節數組中,每個字節將表示一個真/假(0b00000001和0b00000000),這個8位布爾字節可以存儲在一個字節中。儘管如此,還是有很多數據來壓縮看似有限的回報。

只是想到了另一種方法。可以簡單地使用線性(單個)BitSet並進行一些轉換來將2d座標轉換爲1d索引。雖然?哦,順便說一句我使用Java進行此= P

編輯到目前爲止,「M朝着最後的解決方案倚...我已經設法給它一些時間碼和結果都很好至今。

+0

這取決於您需要支持哪些操作。只是測試,設置和清除個別細胞? – Henry 2014-09-13 09:02:01

+3

我們應該等着看嗎?這仍然是一個問題嗎? – laune 2014-09-13 09:18:05

+0

我認爲這類問題更適合程序員堆棧交換通道。 – Bobulous 2014-09-13 13:53:06

回答

0

從內存使用的角度來看,你最後的方法當然是最好的方法。

從易編程,可讀性和速度的角度來看,您應該簡單地使用布爾的二維數組,並完成它。現在,32KB比網站上的簡單圖片要少,因此只要你不是針對某種嵌入式系統,它應該沒有問題。

+0

是的,他們是sry的人......當我輸入問題時,它變得更加清晰了,是的,第三個選項似乎是最好的......一段內存和一些計算線性索引的基本數學運算非常精美。至於其餘的意見,他們表示讚賞。就這個項目而言,它只是一種計算性的生命類遊戲。我以低fps運行我的程序,因爲我開始在較高的幀率下丟幀,我想從中找出更多,並且最好的辦法是縮小數據並優化我的位置。無論如何,問題都解決了,並感謝你的投入。 – 2014-09-13 18:40:19

1

如果您的問題在您的標題準確地表示:

BitSet[] array = new BitSet[1024]; // or whatever you need 

如果這不是回答你的問題,這裏沒有明顯的問題的答案。

+0

很好的答案,但不是我的意思。我應該說我可以創建一個BitSet的數組,所以我可以模仿一個2d布爾數組。 – 2014-09-13 18:46:28

相關問題