Синтаксис дженериков Списка Java для типов примитивов

Я хочу сделать growable массив байтов. Т.е. список. В c# usally сделал бы следующий синтаксис

List<byte> mylist = new List<byte>();

где как в Java этот синтаксис не работает, и я погуглил вокруг и нашел ниже кода

List myList = new ArrayList();

но это не то, что я хочу. Какая-либо идея, где я иду не так, как надо?

7
задан Bozho 15 December 2010 в 06:51
поделиться

4 ответа

Используйте класс-обертку Byte:

List<Byte> mylist = new ArrayList<Byte>();

Тогда, из-за автобоксинга, у вас все равно получится:

for (byte b : mylist) {

}
5
ответ дан 6 December 2019 в 15:21
поделиться

Вы также можете использовать TByteArrayList из библиотеки GNU Trove.

6
ответ дан 6 December 2019 в 15:21
поделиться

У вас есть класс Byte , предоставленный JRE.

Этот класс является соответствующим классом для примитивного типа byte .

См. здесь для примитивных типов.

Вы можете сделать это:

List<Byte> myList = new ArrayList<Byte>();
byte b = 127;
myList.add(b);
b = 0; // resetting
b = myList.get(0); // => b = 127 again

Как указал Майкл в комментариях:

List<Byte> myList = new ArrayList<Byte>();
Byte b = null;
myList.add(b);
byte primitiveByte = myList.get(0);

приводит к:

Exception in thread "main" java.lang.NullPointerException
    at TestPrimitive.main(TestPrimitive.java:12)
3
ответ дан 6 December 2019 в 15:21
поделиться

Обратите внимание, что использование ArrayList для хранения растущего массива байтов, вероятно, не очень хорошая идея, поскольку каждый байт помещается в коробку, что означает выделение нового объекта Byte. Таким образом, общая стоимость памяти на байт составляет один указатель в ArrayList + один объект Byte.

Возможно, лучше использовать java.io.ByteArrayOutputStream. Там затраты памяти на один байт составляют 1 байт.

Мы сможем дать лучший совет, если вы опишите контекст немного подробнее.

0
ответ дан 6 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: