2011-06-14 49 views
0

嗨,我必須使用UI顯示值驗證數據庫值,所以我使用Watij作爲自動化工具。 當我必須將數據庫值存儲到散列映射中時,會出現問題。 假設數據庫有3個字段名稱,電子郵件和地址。 並且在觸發查詢後,獲取的行是10. 我將字段值作爲哈希表中的鍵值,並將檢索到的行作爲值。如何存儲散列表中的多個值相對於唯一鍵

我無法將值存儲在hashmap中。當我使用hashmap的值被覆蓋,最後我總是得到相應鍵的單個值。我試圖聲明散列圖有兩個參數作爲字符串和一個字符串[],但我無法讀取最終值。 任何人都可以幫助,因爲我不是java專家。 謝謝。

+0

一小段代碼會有幫助。無法得到清晰的圖片這裏有什麼問題。 – 2011-06-14 07:48:16

+3

[object denial]的另一種情況(http://stackoverflow.com/questions/3725703/how-to-store-more-than-one-string-in-a-map)。你正在從錯誤的一端接近問題。 – 2011-06-14 07:57:57

+0

我最近注意到,Map似乎是Java中最被誤用和誤解的數據結構。對象拒絕確實! – 2011-06-14 09:47:53

回答

0

你在哪裏聲明瞭字符串?你將不得不在循環內部(在循環結果集的地方)聲明它。如果你沒有在循環內創建一個新對象,那麼同一個字符串的引用將被存儲在hashmap的所有值中,並且你將在你的hashmap中獲得一個值。如果在這裏也提到了代碼,那麼很容易找出確切的問題。

1

那麼在一張地圖上,鑰匙需要是唯一的,所以如果你保持添加(電子郵件,blabla @ hotmail.com),它已經有了(電子郵件,nana @ gmail.com)他們你只會覆蓋第一個一。如果你想要的只是一個電子郵件列表,地址和名字是不是更好的做一個名爲人或類的類,並將它們添加到列表中?

和人(姓名,電子郵件,地址)一樣,然後將其添加到列表中。

1

將對象存儲在hashmap中時,可以使用該對象的哈希碼作爲key,然後可以將該對象本身保存爲值,但請確保您正確實施了hasCode()equals方法,正如你所知,hashmap內部使用hashcode()和'equals`存儲數據的方法。

現在,當實現hashcode或equals方法時,可以使用您認爲唯一標識該行的任何屬性(該行的列)。

此外,性能明智這將是一個更好的方法。

1

你可以像那樣的地圖爲HashMap<String, Data>其中第一個參數是關鍵(我假設String,你可以使用你想要的)和Data是一個包含該關鍵字的數據值的一類。 Data可能是:

public class Data { 

    private String name; 
    private String address; 
    private String email; 

    ... 
} 

您可以添加對象到地圖map.put(key, new Data(...))。 更簡單的方法是使用數組,在像HashMap<String,String[]>這樣的地圖中使用,但不是很有用。 DB查詢的Java思想是創建對象來封裝每條記錄。

相關問題