基本类型的Java列表泛型语法

基本类型的Java列表泛型语法,java,list,generics,collections,Java,List,Generics,Collections,我想制作一个可增长的字节数组。即一份清单。 在c#中,将通常执行以下语法 List<byte> mylist = new List<byte>(); 但这不是我想要的。知道我哪里出错了吗?使用包装类Byte: List<Byte> mylist = new ArrayList<Byte>(); 您有一个由JRE提供的类 此类是字节基元类型的对应类 有关基本类型,请参见 您可以这样做: List<Byte> myList = new

我想制作一个可增长的字节数组。即一份清单。 在c#中,将通常执行以下语法

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

但这不是我想要的。知道我哪里出错了吗?

使用包装类
Byte

List<Byte> mylist = new ArrayList<Byte>();
您有一个由JRE提供的类

此类是
字节
基元类型的对应类

有关基本类型,请参见

您可以这样做:

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

请注意,使用
ArrayList
存储可增长的字节数组可能不是一个好主意,因为每个字节都会被装箱,这意味着分配了一个新的字节对象。因此,每个字节的总内存开销是ArrayList中的一个指针+一个字节对象

最好使用
java.io.ByteArrayOutputStream
。在这里,每个字节的内存开销是1字节


如果您稍微描述一下上下文,我们可以提供更好的建议。

您也可以从中使用。

列表是一个界面,因此您无法创建新的界面。您需要使用具体的类,例如ArrayList或LinkedList@Michael威廉姆森是个打字错误,而不是我不知道;)值得注意的是,与原语数组相比,这种解决方案使用的内存是原语数组的5-9倍,并为每次访问添加了额外的间接层。每次更改列表中的值时都会分配新内存。可能值得补充的是,泛型和原语不能很好地配合使用——也就是说,不能将原语用作类型参数,因此需要使用Byte而不是Byte。自动装箱并不完美——一个字节可以为空,而另一个字节不能为空,因此尝试将一个字节分配给一个字节可能会导致空指针异常。@Bozho:它们仍然显示为Google或Bing上的第一个结果。搜索引擎很糟糕的一个很好的例子;-)我总是在发布文档链接之前编辑URL(
j2se/1.4.2
=>
javase/6
)。
for (byte b : mylist) {

}
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)