2010-09-09 14 views
9

Ich versuche, eine Hashtable wie im folgenden zu erstellen:Hashtable mit Integer-Schlüssel in Java

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

aber ich bin immer einen Fehler auf beiden int und Byte-Wort „Dimensionen nach diesem Token erwartet“.

Wenn ich so etwas wie:

Hashtable<String, byte[]> - alles ist gut. Kann jemand erklären warum?

Danke.

Antwort

23

In den Core-Auflistungsklassen von Java können Sie nur Referenztypen speichern (etwas, das ein java.lang.Object erweitert). Sie kann nicht speichern Primitiven wie int und byte. Beachten Sie, dass ein Array wie byte[] kein primitiver, sondern auch ein Referenztyp ist.

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

und dann primitive setzen int ist drin als Schlüssel:

Wie @Giuseppe erwähnt, können Sie es wie folgt definieren

table.put(4, ...); 

weil seit Java 1.5, wird automatisch autoboxing Ändern Sie das primitive int in ein Integer (ein Wrapper) hinter den Kulissen.

Wenn Sie mehr Geschwindigkeit benötigen (und die Wrapper-Auflistungsklassen sind das Problem!), Können Sie eine Bibliothek von Drittanbietern verwenden, die Grundelemente in ihren Sammlungen speichern kann. Ein Beispiel für solche Bibliotheken sind Trove und Colt.

0

Java-Generics können nicht mit primitiven Typen instanziiert werden. Versuchen Sie, die Wrapper-Klassen statt:

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

Sie können Integer anstelle von int und wenn Sie Java verwenden 1.5+ die Box/Unboxing-Funktion wird Ihr Leben einfach, wenn die Arbeit mit ihm machen.

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