Hashtable with integer key in Java

对着背影说爱祢 提交于 2019-12-18 15:03:18

问题


I'm trying to create a Hashtable as in the following:

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

but I am getting an error on both int and byte saying "Dimensions expected after this token".

If I use something like:

Hashtable<String, byte[]> - all is good. Can someone explain why?

Thanks.


回答1:


In Java's core collection classes you can only store reference types (something that extends a java.lang.Object). You cannot store primitives like int and byte. Note that an array like byte[] is no primitive but also a reference type.

As @Giuseppe mentioned, you can define it like this:

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

and then put primitive int's in it as keys:

table.put(4, ...);

because since Java 1.5, autoboxing will automatically change the primitive int into an Integer (a wrapper) behind the scenes.

If you need more speed (and measured the wrapper collection classes are the problem!) you could use a 3rd party library that can store primitives in their collections. An example of such libraries are Trove and Colt.




回答2:


Java generics can't be instantiated with primitive types. Try using the wrapper classes instead:

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



回答3:


You can use Integer instead of int and if you're using java 1.5+ the boxing/unboxing feature will make your life easy when working with it.

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


来源:https://stackoverflow.com/questions/3674912/hashtable-with-integer-key-in-java

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!