我正在尝试创建一个Hashtable,如下所示:
Hashtable<int, ArrayList<byte>> block = new Hashtable<int, ArrayList<byte>>();
但我在int和byte上都收到错误,说“在此令牌后预期的维度”。
如果我使用类似的东西:
Hashtable<String, byte[]>
- 一切都很好。有人可以解释原因吗?
感谢。
答案 0 :(得分:26)
在Java的核心集合类中,您只能存储引用类型(扩展java.lang.Object的东西)。您无法存储int
和byte
等基元。请注意,像byte[]
这样的数组不是原始数组,而是引用类型。
正如@Giuseppe所提到的,你可以这样定义:
Hashtable<Integer, ArrayList<Byte>> table = new Hashtable<Integer, ArrayList<Byte>>();
然后将原始int
作为键放在其中:
table.put(4, ...);
因为自Java 1.5起,autoboxing会自动将原语int
更改为幕后的Integer
(包装器)。
如果您需要更高的速度(并且测量了包装器集合类是问题!)您可以使用可以在其集合中存储基元的第三方库。此类库的示例包括Trove和Colt。
答案 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[]>();