将数组中的每个元素添加到列表中

时间:2012-08-15 18:17:45

标签: java arrays list

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

e.g。

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,那么建议采用什么数据结构?

2 个答案:

答案 0 :(得分:6)

对于byte[],你遇到了麻烦。 Arrays.asList无效,因为您有byte[]而不是Byte[]

这是“原始与阶级”问题之一。你可以找到支持它的第三方集合库(例如Apache Commons Lang project),但我不相信有任何开箱即用的东西。或者,你总是可以自己编写代码:

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

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

如果你实际处理类,例如你有一个String[]并且想要一个List<String>,那么你可以使用Arrays.asList()

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

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

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

答案 1 :(得分: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);