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

tha*_*guy 1 java arrays list

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

例如

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

是否有一些实用方法或其他东西可以做到这一点.我尝试使用addAll,但是想要将实际数组添加到集合中.

谢谢.

编辑:

为了澄清,我确实想用byte []来做这件事,因为我最终会将列表转换回byte []并将其提供给MessageDigest.update().这有助于澄清吗?

编辑2:

所以看起来List<Byte>很糟糕; 很坏.如果我基本上添加字节数组(我正在制作一些SALTS和用户信息的哈希)以提供给MessageDigest,那么建议使用什么数据结构?

Jon*_*eet 6

因为byte[],你遇到了麻烦.Arrays.asList不会起作用,因为你有一个byte[]而不是一个Byte[].

这是"原始与阶级"问题之一.您可以找到支持此功能的第三方集合库(例如Apache Commons Lang项目),但我不相信有任何开箱即用的东西.或者,您可以随时自己编写代码:

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

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

如果你确实处理类,比如你有一个String[]和你想List<String>,那么你可以使用Arrays.asList():

String[] array = ...;
List<String> list = Arrays.asList(array);
Run Code Online (Sandbox Code Playgroud)

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

String[] array = ...;
List<String> list = new ArrayList<String>(Arrays.asList(array));
Run Code Online (Sandbox Code Playgroud)