我正在尝试创建一个Hashtable,如下所示:
Hashtable<int, ArrayList<byte>> block = new Hashtable<int, ArrayList<byte>>();
但是我在 int 和 byte 上都遇到了"此标记后面应有维度"的错误。
如果我使用以下语法:
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开始,自动装箱会在幕后自动将基本类型的int
转换为一个包装类Integer
。
如果你需要更快的速度(而且已经确认包装类集合是问题所在),你可以使用第三方库来存储基本类型。这样的库包括Trove和Colt。
Java泛型不能使用原始类型进行实例化。请尝试使用包装类:
Hashtable<Integer, ArrayList<Byte>> block = new Hashtable<Integer, ArrayList<Byte>>();
在编程中,你可以使用Integer而不是int,如果你使用的是Java 1.5+,那么装箱/拆箱功能会让你更轻松地处理它。
Hashtable<Integer,byte[]> block = new Hashtable<Integer,byte[]>();