2012-07-19 36 views
6

我有一個Hashtable其中有一個密鑰String和價值String,但我已經達到了我的項目中,我需要能夠存儲多個不同的數據類型的一個點。例如,我需要將intString,Date等全部存儲在一個Hashtable中。有沒有辦法將多個數據類型存儲在單個散列表變量中?

+3

將鍵改爲'Object'? – Mysticial 2012-07-19 19:36:28

+1

使用get/set創建一個對象並添加該對象HashTable/ArrayList(或)什麼是您感興趣的集合是不是很好的選擇?如果您添加多個數據類型,而檢索如果您不知道確切的索引和數據類型,則最終會出現classcastexception。 – kosa 2012-07-19 19:37:03

+0

這聽起來像一個非常脆弱的數據結構。你能描述一下你試圖達到的目標麼,也許有人可以提出一種更好地構建數據的方法嗎? – Bobulous 2012-07-19 20:06:57

回答

7

HashTable或任何收藏Map可以解決這個問題,除了int和其他原始類型:您不能儲存基本類型,只有Object引用。需要將int包裝爲Integer對象。

+0

那麼我能否將它作爲它存儲的數據類型來檢索? – samwell 2012-07-19 19:41:45

+2

不是真的,不 - 不是 - 沒有演員陣容,它仍然是挑剔的。對於不同的類型,使用不同的地圖會更好 - 或者更好 - 只需創建一個帶有每個不同名稱的字段的類,而不是有一個'Map',您希望您確信一切正確的類型。 – 2012-07-19 19:45:11

4

你可以讓它存儲一般數據類型Object,雖然那不允許原始數據類型。

0

將您的HashTable更改爲Hashtable<String, Object>,並且當您想要存儲int時,您需要先將其拋出(或使用自動播種)至Integer。在從表格中獲得您的價值後,您可以通過if(value instanceof String)等等來確定您的類型。

+4

沒有必要強制轉換 - 自動裝箱會自動執行(Java 5+)。 – 01es 2012-07-19 19:41:51

+3

該類稱爲Hashtable,它需要兩個類型參數,而不是一個。 – 2012-07-19 19:44:17

6
Map<String, Object> map = new HashMap<String, Object>() 

這給你與String類型的密鑰和類型對象,這基本上意味着型對象(日期,整數,字符串等)的任何後代的值的映射圖。其他答案正確地指出這樣一個事實,即不是使用像int,boolean這樣的原語,而是使用它們的對應整數,布爾等。

get在這樣的地圖上的返回類型操作是Object。因此,開發人員有責任正確處理類型信息。

有關Hashtable和HashMap之間有什麼區別的問題的一個很好的答案是here

4

雖然這是可能的,但它通常不是一個好主意。通常這會導致類型轉換異常和問題。

HashTable可以設置爲存儲通用對象而不是特定的類類型,但是檢索它們時的類型轉換不會自動發生。

爲了將對象從集合中取出,必須開發某種形式的類型檢查例程。

您最好爲要存儲的每個類類型創建一個單獨的集合。 PS:我也推薦使用HashMap而不是HashTable。 HashTable已被棄用。

+0

謝謝,我不知道。 – samwell 2012-07-19 20:06:32

相關問題