Java中byte[]和List<Byte>有什么区别?

4

两种方法都可以用来创建字节列表。但它们之间有什么区别?

byte[] buffer;
List<Byte> buffer;

一个 List<Byte> 不是一个字节数组。 - Jesper
1
一个 List<Byte> 是一个 List 而不是一个数组。byte 是一个原始类型,Byte 是它的包装类,就像 intInteger 一样。 - Héctor
3个回答

10
两者都可以用来创建字节数组
不,第一个是创建字节数组。第二个定义了一个字节的列表,具体是否由数组支持取决于使用哪个List实现。
数组是固定大小和预分配的;如果需要扩大数组,需要创建一个新的、更大的数组,复制内容,然后添加新的内容。
另一方面,列表通常是动态的,随着您添加元素而增长,随着您从中删除元素而缩小等。一种列表实现ArrayList通过维护一个支持数组,通常有些松散,然后在添加时根据需要进行重新分配和复制来实现这一点。
还要注意的是List实际上不能包含原始的byte值; 相反,它将包含Byte对象(通过称为自动装箱的过程)。

有没有办法将 List<Byte> 对象转换为 byte[] 数组? - Machado
1
@Tardo 当然。1)创建一个大小与列表相同的 byte[];2)遍历列表;3)对于列表中的每个 Byte,将其基本值插入数组中。 - afsantos
1
@Tardo:嗯,List 接口上有一个诱人的 List#toArray(T[] a) 方法。我从未使用它将 List<Byte> 自动解包为 byte[],不知道是否会自动执行。 - T.J. Crowder
1
@Tardo:刚试了一下,不行,除非我做错了(你可以得到Byte[],但不能得到byte[])。所以正如afsantos所说,你必须用循环来实现。 - T.J. Crowder

4
byte[]数组的大小是固定的,而列表则不是。 byte[]数组包含原始的byte值,而列表包含装箱的byte值,因此列表需要更多的内存。
更多信息请参见: List和array有什么区别?

2

byte[] buffer 是一个原始的 byte 数组,没有任何可以在 Byte[] 上进行的方法。
List<Byte> buffer 是一个 Byte 对象的 List 对象,它也有在 Byte 中定义的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接