原始类型的Java List泛型语法

时间:2010-02-20 11:25:25

标签: java list generics collections

我想制作一个可增长的字节数组。我是一个清单。 在c#中,通常会使用以下语法

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

在java中,这种语法不起作用,我已经google了一下,找到了下面的代码

List myList = new ArrayList();

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

4 个答案:

答案 0 :(得分:6)

您也可以使用TByteArrayList中的GNU Trove library

答案 1 :(得分:5)

使用包装器类Byte

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

然后,由于自动装箱,您仍然可以:

for (byte b : mylist) {

}

答案 2 :(得分:3)

您有一个由JRE提供的Byte课程。

此类是byte基元类型的对应类。

有关原始类型,请参阅here

你可以这样做:

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 :(得分:0)

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

使用java.io.ByteArrayOutputStream可能更好。在那里,每字节的内存成本是1个字节。

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