Hashtable与Java中的整数键

时间:2010-09-09 08:23:40

标签: java hashtable

我正在尝试创建一个Hashtable,如下所示:

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

但我在int和byte上都收到错误,说“在此令牌后预期的维度”。

如果我使用类似的东西:

Hashtable<String, byte[]> - 一切都很好。有人可以解释原因吗?

感谢。

3 个答案:

答案 0 :(得分:26)

在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

答案 1 :(得分:0)

Java泛型无法使用基本类型进行实例化。请尝试使用包装类:

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

答案 2 :(得分:0)

您可以使用Integer而不是int,如果您使用的是java 1.5+,则装箱/取消装箱功能可以让您在使用它时轻松生活。

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