Hashtable с целочисленным ключом в Java - PullRequest
11 голосов
/ 09 сентября 2010

Я пытаюсь создать Hashtable следующим образом:

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

, но я получаю сообщение об ошибке как для int, так и для байта, говоря: "Размеры ожидаются после этого токена".* Если я использую что-то вроде:

Hashtable<String, byte[]> - все хорошо.Может кто-нибудь объяснить, почему?

Спасибо.

Ответы [ 3 ]

26 голосов
/ 09 сентября 2010

В базовых классах 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 autoboxing автоматически изменит примитив int на Integer (оболочку) за кулисами.

Если вам нужна большая скорость (и проблема заключается в измерении классов коллекций оболочек!), Вы можете использовать стороннюю библиотеку, которая может хранить примитивы в своих коллекциях.Примером таких библиотек являются Trove и Colt .

0 голосов
/ 09 сентября 2010

Вы можете использовать Integer вместо int, и если вы используете Java 1.5+, функция упаковки / распаковки облегчит вашу жизнь при работе с ним.

Hashtable<Integer,byte[]> block = new Hashtable<Integer,byte[]>();
0 голосов
/ 09 сентября 2010

Обобщения Java не могут быть созданы с примитивными типами.Попробуйте вместо этого использовать классы-оболочки:

Hashtable<Integer, ArrayList<Byte>> block = new Hashtable<Integer, ArrayList<Byte>>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...