1

将数组中的所有元素添加到列表中的最简单方法是什么?

例如

List<Byte> l = new ArrayList<Byte>();
//Want to add each element in below array to l
byte[] b = "something".getBytes("UTF-8");

是否有一些实用方法或这样做的东西。我尝试使用 addAll,但它想将实际数组添加到集合中。

谢谢你。

编辑:

澄清一下,我确实想使用 byte[] 来执行此操作,因为我最终会将列表转换回 byte[] 并将其提供给 MessageDigest.update()。这有助于澄清吗?

编辑2:

所以看起来List<Byte>很糟糕;很坏。如果我基本上是添加字节数组(我正在对一些 SALTS 和用户信息进行哈希处理)以馈入 MessageDigest,那么建议使用哪种数据结构?

4

2 回答 2

6

因为byte[],你有麻烦了。Arrays.asList不会工作,因为你有 abyte[]而不是 a Byte[]

这是那些“原始与阶级”问题之一。您可能会找到支持此功能的 3rd 方集合库(例如Apache Commons Lang 项目),但我不相信有任何开箱即用的东西。或者,您总是可以自己编写代码:

List<Byte> l = new ArrayList<Byte>();
for (byte b : "something".getBytes("UTF-8"))
{
    l.add(b);
}

请注意,对于字节序列,这是一种非常低效的存储格式。尽管自动装箱将确保您不会创建任何额外的Byte对象,但每个元素仍然会有 4 或 8 个字节,因为它们将是引用。a 是非常罕见的List<Byte>——你确定你需要它吗?

如果您实际上是在处理课程,例如您有 aString[]并且想要 aList<String>那么您可以使用Arrays.asList()

String[] array = ...;
List<String> list = Arrays.asList(array);

这将返回一个包装数组的只读列表 - 如果你想要一个可变列表,你可以将该包装器传递给ArrayList构造函数:

String[] array = ...;
List<String> list = new ArrayList<String>(Arrays.asList(array));
于 2012-08-15T18:23:18.210 回答
3

除非您想在循环中一次添加每个元素,否则可以使用 Apache commons 的ArrayUtils将原始数组转换为 Object 数组,然后使用addAll()

byte[] b = "something".getBytes("UTF-8");
Byte[] bArray = ArrayUtils.toObject(b);

List<Byte> l = new ArrayList<Byte>();
l.addAll(bArray);
于 2012-08-15T18:25:41.897 回答