2010-09-09 6 views
9

Je suis en train de créer un Hashtable comme dans les domaines suivants:Hashtable avec clé entier en Java

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

mais je reçois une erreur sur deux octets int et dire « Dimensions prévu après ce jeton ».

Si j'utilise quelque chose comme:

Hashtable<String, byte[]> - tout est bon. Quelqu'un peut-il expliquer pourquoi?

Merci.

Répondre

23

Dans les classes de collection de base Java, vous ne pouvez stocker que des types de référence (quelque chose qui étend un java.lang.Object). Vous ne peut pas stocker des primitives comme int et byte. Notez qu'un tableau comme byte[] n'est pas une primitive mais aussi un type de référence.

Comme mentionné @Giuseppe, vous pouvez le définir comme ceci:

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

puis mis de int primitifs » comme dans les clés:

table.put(4, ...); 

parce que depuis Java 1.5, autoboxing sera automatiquement changez la primitive int en une Integer (une enveloppe) dans les coulisses.

Si vous avez besoin de plus de rapidité (et que vous avez mesuré les classes de collection de wrapper sont le problème!), Vous pouvez utiliser une bibliothèque tierce qui peut stocker des primitives dans leurs collections. Un exemple de telles bibliothèques est Trove et Colt.

0

Les génériques Java ne peuvent pas être instanciés avec des types primitifs. Essayez d'utiliser les classes wrapper à la place:

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

Vous pouvez utiliser des entiers au lieu de int et si vous utilisez Java 1.5+ la fonctionnalité de boxe/unboxing vous rendra la vie facile lorsque vous travaillez avec elle.

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