簡體   English   中英

將數組中的每個元素添加到列表中

[英]Add each element in array to a list

將數組中的所有元素添加到列表的最簡單方法是什么?

例如

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>是錯誤的; 很壞。 如果我基本上是添加字節數組(我對一些SALT和用戶信息進行哈希處理)以饋送至MessageDigest,那么將建議采用哪種數據結構?

對於byte[] ,您遇到了麻煩。 Arrays.asList將不起作用,因為您有一個byte[]而不是一個Byte[]

這是那些“原始與類”問題之一。 您可能會找到支持此功能的3rd party集合庫(例如Apache Commons Lang項目 ),但是我不認為有任何現成的東西。 另外,您始終可以自己編寫代碼:

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);

但是,這將返回一個包裝該數組的只讀列表-如果您想要一個可變列表,則可以將該包裝傳遞給ArrayList構造函數:

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

除非您希望一次循環添加每個元素,否則可以使用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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM