2010-09-09 149 views
9

的整數鍵我試圖創建一個哈希表如下所示:哈希表在Java

Hashtable<int, ArrayList<byte>> block = new Hashtable<int, ArrayList<byte>>(); 

但我在兩個int和「此令牌後有望尺寸」字節說法得到一個錯誤。

如果我使用類似:

Hashtable<String, byte[]> - 一切都很好。有人能解釋爲什麼嗎?

謝謝。

回答

23

在Java的核心集合類中,只能存儲引用類型(擴展java.lang.Object的東西)。您不能存儲原語,如intbyte。請注意,像byte[]這樣的數組不是原始的,而且也是引用類型。

正如@Giuseppe提到的,你可以這樣定義它:

Hashtable<Integer, ArrayList<Byte>> table = new Hashtable<Integer, ArrayList<Byte>>(); 

,然後把原始int的在它的鍵:

table.put(4, ...); 

因爲自從Java 1.5,autoboxing會自動將原始的int更改爲幕後的Integer(包裝器)。

如果你需要更多的速度(並測量包裝集合類是問題!),你可以使用第三方庫,可以在其集合中存儲基元。這種庫的一個例子是TroveColt

0

Java泛型不能用原始類型實例化。嘗試使用包裝類來代替:

Hashtable<Integer, ArrayList<Byte>> block = new Hashtable<Integer, ArrayList<Byte>>(); 
0

你可以用它代替INT整數,如果你使用的是Java 1.5+拳擊/拆箱功能與它一起工作時,將讓您的生活更輕鬆。

Hashtable<Integer,byte[]> block = new Hashtable<Integer,byte[]>();