哈希表在Java
问题描述:
的整数键我试图创建一个哈希表如下所示:哈希表在Java
Hashtable<int, ArrayList<byte>> block = new Hashtable<int, ArrayList<byte>>();
但我在两个int和“此令牌后有望尺寸”字节说法得到一个错误。
如果我使用类似:
Hashtable<String, byte[]>
- 一切都很好。有人能解释为什么吗?
谢谢。
答
在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。
答
Java泛型不能用原始类型实例化。尝试使用包装类来代替:
Hashtable<Integer, ArrayList<Byte>> block = new Hashtable<Integer, ArrayList<Byte>>();
答
你可以用它代替INT整数,如果你使用的是Java 1.5+拳击/拆箱功能与它一起工作时,将让您的生活更轻松。
Hashtable<Integer,byte[]> block = new Hashtable<Integer,byte[]>();