2013-12-15 46 views
1

我已經獲得了我嘗試使用的相當大比例的二維數據,每個數據都有一個(x, y)座標,然後找到一組數據在那個座標上。用於Java中的HashMap的二維可迭代鍵

我現在正在做的只是使用一個HashMap來循環,通過檢查座標的方法知道什麼時候進入下一個'line'(所以如果數據是[0-10]爲x然後它測試11(和倍數)計算在哪裏顯示一條新線)。這相當麻煩,我希望有一個更簡單的解決方案,但我還沒有能夠找到一個適合Google或SO的。

我想要做的東西以下僞碼: 的HashMap thisMap =(鍵= IntArray [] [],值= IntArray []) 我在哪裏可以設置一個特定的2-d int數組作爲整個事物的關鍵,然後通過一個循環來分配值(並且容易獲得值),這是一種可迭代的方式。我能想到的最接近的東西是PHP如何處理多維數組,以及foreach(),您可以在其中嵌套foreach()循環,但我不確定這在Java中如何工作。

目標是最終能夠寫出兩個方法,一個將沿着​​(第一位)迭代,然後進入下一行;另一個將它視爲「幀」並遍歷Y-axis。我不想讓任何人爲我寫這些,甚至是HashMap代碼,但我希望能夠指出正確的方向,如何做到這一點(如果可能的話),只需要Java SE中提供的標準庫而不是壓倒一切。如果沒有,那麼希望能夠指導如何安全地重載。

注意

這裏的另一個問題是,這組數據是相當大的,和我最初試圖做的是我自己寫的Tuple class,但我第一次使用它,我跑出來的堆內存,這就是爲什麼我試圖堅持一個單一的2-d基本詮釋數組爲此。

編輯

我發現這些: Java usage of HashMap or Map with multidimensional arrays

Java HashMap associative multi dimensional array can not create or add elements

How to implement a Map with multiple keys?

但他們似乎沒有要試圖實現同樣的事情。

EDIT 2

另一個複雜的是,在Y-axis鍵是不連續的,雖然他們是有序的從低到高。

回答

0

聽起來像您的要求涉及混合模型和視圖,因爲您的視圖包含x,y座標,並且您有與每個x,y座標關聯的數據。雖然我通常儘量不要混合模型和視圖,但您的要求讓我想到了writeableraster。 writeableraster是像素的一維數組,但它始於窗口的左上角並迭代行和列,直到它到達右下角。我認爲它一欄一列,但它可能會逐行。通過調整可寫入的柵格索引和窗口的寬度/高度,可以計算行和列。

可寫入的柵格非常快,因爲您直接寫入像素數組。然後通過連接到JPanel或Canvas的bufferedimage和/或圖形對象將它發送給gui。

至於迭代結構,我使用arraylist arraylist來處理多變量結構。關於數組列表的好處在於,它們可以是可變長度的,與實例化時需要定義長度的數組不同。但是,無論您使用嵌套ArrayList還是嵌套數組,都可以根據需要嵌套儘可能多的圖層,以便處理數據結構。

如果你的代碼看起來很複雜和麻煩,那麼把它分解成許多方法可能是有意義的。當我在java中編寫複雜的算法時,我試圖遵循一個保持每個方法少於十行代碼的規則。我將其全部映射到流程圖中,每個方法都有一個框,箭頭指向算法循環中方法之間的控制流。

這是回答您的問題嗎?這是很難理解你的問題的要點,因爲它似乎在你寫作時仍然在思考。