2010-09-09 10 views
9

estoy tratando de crear una tabla hash como en el siguiente:tabla hash con la clave número entero en Java

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

pero estoy recibiendo un error en tanto int bytes y decir "Dimensiones espera después de esta señal".

Si utilizo algo como:

Hashtable<String, byte[]> - todo es bueno. ¿Alguien puede explicar por qué?

Gracias.

Respuesta

23

En las clases de colección central de Java, solo puede almacenar tipos de referencia (algo que amplía un java.lang.Object). Usted no puede primitivas tienda como int y byte. Tenga en cuenta que una matriz como byte[] no es primitiva sino que también es un tipo de referencia.

Como se mencionó @Giuseppe, se puede definir así:

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

y luego poner primitivos int 's en ella como claves:

table.put(4, ...); 

porque desde Java 1.5, autoboxing automáticamente lo hará cambie la primitiva int en un Integer (una envoltura) detrás de las escenas.

Si necesita más velocidad (y midió que las clases de recolección del contenedor son el problema), podría usar una biblioteca de terceros que pueda almacenar primitivas en sus colecciones. Un ejemplo de tales bibliotecas es Trove y Colt.

0

genéricos de Java no se pueden crear instancias de tipos primitivos. Trate de usar las clases de envoltura en su lugar:

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

Se puede utilizar en lugar de enteros int y si usted está usando Java 1.5 + la función de boxeo/unboxing le hará la vida más fácil al trabajar con ella.

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