2012-11-22 30 views
0

我需要以Key Value方式存儲信息。但內置的Map接口不適合我的要求。 Java Map要求鍵和值都是引用,而我需要使用原始值作爲鍵。Java中有什麼KV數據結構接受原始類型的鍵?

有沒有像Map這樣的數據結構?謝謝你的幫助!

需求詳細信息:

我用Java編寫的服務器作爲後臺進程運行監聽TCP端口。當用戶第一次連接時,有關用戶的詳細信息需要以KV方式存儲,並且第二次用戶連接時,他的詳細信息應該能夠從KV數據結構中讀取。

我不能使用用戶對象作爲鍵,因爲它將在斷開連接時被破壞,並在第二個連接中重新構建。這兩個對象不是相同的參考。由於相同的原因,整數鍵不適合我的要求。

換句話說,我需要使用值作爲鍵,而不是引用。

可以考慮的鍵是:UUID(long),id(int)等等。它們都是原始類型。

+0

你有沒有試過谷歌的「java地圖」? –

+0

謝謝@ChristianKuetbach,我已經搜索了很長時間,並沒有找到任何我需要的東西。 – sailing

+0

Quoi的使用包裝的答案是正確的。與C++不同,Java模板僅適用於類,而不是基元,因此需要包裝器。 – Dukeling

回答

1

我不明白爲什麼你不能簡單地包裹你的基本類型在它對應的非原始類和使用,作爲一個普通的Java映射你的鑰匙。

​​
+0

你不需要創建新的整數,自動裝箱就是這樣。 –

+0

也許這是我正在尋找的。謝謝@pap – sailing

0

你在找什麼叫做Hashmap。

Hashmap<Long, Integer> dict=new HashMap<Long, Integer>(); 
dict.put(24,10); 
dict.put(13,63); 
dict.get(13); // Equals 63 

從本質上講,一個HashMap將採取的第一個參數作爲重點,第二是價值,完全按照自己的要求。儘管不能傳遞基元,但您可以指定任何類型,包括Long比普通的要大。不過,這對我來說從來都不是問題。

+0

對不起,我以前的標題,可能無法清楚地表達我。從Map繼承的類不能滿足我的要求。 – sailing

+0

爲什麼。請解釋。 –

+0

這是錯誤的'dict.get(13)'將返回null。要得到63,你需要運行'dict.get(Long.valueOf(13))' – husayt

2

你仍然可以使用Java地圖去爲包裝類可用於所有的基本類型和Java支持自動裝箱,所以你可以使用java.util.Map。前 -

Map<Long,Integer> map = new HashMap<Long,Integer>(); 
long uuid=10; int i= 10; 
map.put(uuid,i); 
1

沒有,集合千萬不能支持基本類型,所以你必須使用一個包裝類基本類型或數組。

0

HashMap類是細用於使用鍵 - 值對,但是它接受原始類型沒有這樣的事情。

我們仍然會嘗試在Map上下文中使用原始類型。

HashMap<Integer, V> map = new HashMap<>(); 
map.put(12, someV); 

正如我們寫map.put(12, someV),其實,一個不能使用原始類型作爲java.util.Map類的「放」方法的第一個參數。但在Java中,整數「12」將被自動「轉化」自動盒裝)插入correspondenting包裝類,在這種情況下Integer

因此,這意味着,實際上是有Integer類型的在一個HashMap對象,但它是反射作爲int

0

各種實現存在於別處,但不在標準java庫中。例如參見LongHashMap

相關問題