2013-01-11 30 views
0

我有4個班。 One擁有關於客戶的信息。另一個關於訂單。 另外2個類扮演註冊表角色,一個是客戶註冊表,另一個是訂單註冊表。java中的協會和hashmaps

訂單註冊表有一個HashMap,看起來像這樣:

private HashMap<Integer, Order> orderRegistryMap = new HashMap<>(); 

這同樣適用於客戶的註冊表。

private HashMap<Integer, Customer> customersRegistryMap = new HashMap<>(); 

類別訂單有一個int orderid。類客戶有一個int customerid。 我通過兩個加登記演示數據(可以說1個客戶與客戶ID 100,和一個爲了與訂單ID 500

我寫簡單的方法,通過訂單ID搜索訂單或獲得全部訂單的HashMap中。 我也寫了簡單的方法,通過客戶ID搜索客戶或獲得所有客戶的HashMap中。

我需要寫能找到的OrderID客戶並獲得其與客戶ID相關聯的所有訂單的方法幫助。

有何創意?

+7

請發表您試過的內容,以及它如何解決問題。 – ppeterka

+0

這就是問題所在。我沒有看到如何在不編寫迭代通過鍵的方法直到找到匹配的情況下將它們鏈接起來。這是要走的路嗎? – JavaNewb

+0

你有沒有遇到[get()](http://docs.oracle.com/javase/6/docs/api/java/util/Map.html#get(java.lang.Object) )在[Map](http://docs.oracle.com/javase/6/docs/api/java/util/Map.html)中定義的函數?我建議查找什麼散列和hashmap的意思,以及如何利用它們。更不用說所有你可以閱讀[Object.hashCode()](http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#hashCode())(和一旦出現,[Object.equals()](http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#equals())) – ppeterka

回答

1

處理這種關係的典型方法(這看起來像是一對多的實際情況)是在訂單本身中存儲客戶ID。這是因爲每個訂單都有一個且只有一個客戶。如果你不這樣做,你別無選擇,只能遍歷數組。

編輯:爲反向關係客戶 - >訂單我會用一個反向的註冊表是這樣的:

HashMap<Integer/*customer_id*/, 
     List<Integer> /*list of orders for the customer*/> customer_orders; 

並保持在同步與訂單和客戶。這將以你能得到的速度執行,我認爲你可以使用更少的內存來實現你想要的。

+0

我開始時就做過了。訂單數據包含客戶編號。 但是,一旦我選擇了一個客戶並加載其數據,我就不會看到我如何找到相關訂單,因爲客戶與訂單之間沒有關聯,只能從訂單到客戶。 如果我要加載訂單,找到訂單的客戶很容易,因爲customerid就在那裏。 如何將其變成雙向街道? :) – JavaNewb

+0

因此,您已經有了第一個問題的解決方案 - 您可以爲每個訂單找到客戶。至於第二請求我將建立一個索引或包含相對映射一個HashMap: 'HashMap中'<整數/ * CUSTOMER_ID * /,列表/*訂單爲客戶* /列表>並保持在同步過。我不認爲很多都可以在這裏進行了優化,還我懷疑你可以使用更少的內存做。 –

+0

謝謝!我現在就試試這個。 – JavaNewb