哈希表在Java

问题描述:

的整数键我试图创建一个哈希表如下所示:哈希表在Java

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

但我在两个int和“此令牌后有望尺寸”字节说法得到一个错误。

如果我使用类似:

Hashtable<String, byte[]> - 一切都很好。有人能解释为什么吗?

谢谢。

在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

Java泛型不能用原始类型实例化。尝试使用包装类来代替:

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

你可以用它代替INT整数,如果你使用的是Java 1.5+拳击/拆箱功能与它一起工作时,将让您的生活更轻松。

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