首頁 > Java > java教程 > 主體

Java如何將陣列轉換成List? (程式碼範例)

青灯夜游
發布: 2019-11-26 17:11:12
轉載
22636 人瀏覽過

有時候我們需要將數組類型轉換成為集合類型,因為後者是一個更強大的資料結構,java.util.List 有許多普通數組不支援的功能。例如:我們可以透過List內建的方法輕易地偵測list是否包含某一個特定的值。以下是一些怎麼將陣列轉換為list的範例。

Java如何將陣列轉換成List? (程式碼範例)

透過ja​​va.util.Arrays.asList()將Array 轉換成List

Arrays 類別有一個方便的方法asList,可以幫助轉換任務,下面是語法:

public static <T> List<T> asList(T... a)
登入後複製

注意:參數不一定必須是數組,可變參數也可以。它可以創建一個lis

public class Test {
   public static void main(String[] args) {
      List<String> myList = Arrays.asList("Apple");
   }
}
登入後複製

以上程式碼將穿件一個包含一個元素"Apple"的集合。我們也可以這樣做:

public class Test {
   public static void main(String[] args) {
      List<String> myList = Arrays.asList("Apple", "Orange");
   }
}
登入後複製

這將產生一個包含兩個元素"Apple","Orange"的集合

因為這是一個可變參數。我們可以傳遞一個數組,數組元素被認定為參數,例子:

public class Test {
   public static void main(String[] args) {
      String[] myArray = { "Apple", "Banana", "Orange" };
      List<String> myList = Arrays.asList(myArray);
      for (String str : myList) {
         System.out.println(str);
      }
   }
}
登入後複製

這樣,一個String集合被創建出來了。數組myArray被加進去了。 myList 集合有三個元素,一下是輸出:

Apple
Banana
Orange
登入後複製

陷阱

#這個方法有一些問題,傳遞進去的陣列必須是對象數組,而不能是基本型別數組。例如:

public class Test {
   public static void main(String[] args) {
      int[] myArray = { 1, 2, 3 };
      List myList = Arrays.asList(myArray);
      System.out.println(myList.size());
   }
}
登入後複製

程式碼輸出是1。為什麼呢?因為asList方法期望一個物件的可變參數,但是傳遞進去的參數是一個基本型別數組,它建立了一個數組集合。所以該集合的為唯一元素就是myArray。因此 myList.get(0) 將會傳回與myArray相同的物件。

asList()建立的物件是固定大小的

#asList()方法傳回的list物件是固定大小的,不能容納更多的元素,例如:

public class Test {
   public static void main(String[] args) {
      String[] myArray = { "Apple", "Banana", "Orange" };
      List<String> myList = Arrays.asList(myArray);
      myList.add("Guava");
   }
}
登入後複製

輸出如下:

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(AbstractList.java:148)
    at java.util.AbstractList.add(AbstractList.java:108)
    at Test.main(Test.java:8)
登入後複製

因為myList是固定長度的,不能加入更多元素。

因為方法傳回的List物件不是java.util套件下面的ArrayList,而是Arrays內部的ArrayList類型。改類別沒有實作add,revmove,clear方法,所以任何對改集合結構修改的呼叫都會失敗。

將基本陣列型別轉換成List

#如如上面所提到的。傳遞一個基本型別陣列到asList方法不生效,一個不引入第三方函式庫的解決方法是透過Java8 的流,範例如下:

public class Test {
   public static void main(String[] args) {
      int[] intArray = { 5, 10, 21 };
      List myList = Arrays.stream(intArray).boxed()
            .collect(Collectors.toList());
   }
}
登入後複製

陣列的每一個元素都被從int轉換成了Integer型別(裝箱),陣列就轉成了List型。

將陣列轉換成允許添加元素的List

#正如上面陷阱部分所提到的,Arrays.asList()方法不支援添加或移除元素。如果你不想這樣,以下是可選方案:

public class Test {
   public static void main(String[] args) {
      String[] myArray = { "Apple", "Banana", "Orange" };
      List<String> myList = new ArrayList<String>(Arrays.asList(myArray));
      myList.add("Guava");
   }
}
登入後複製

這段程式碼明確地建立了一個新的ArrayList對象,然後將Arrays.asList的結果加進去了。因為我們創建了一個ArrayList。所以沒有增加移除限制,上面的程式碼執行結束前有四個元素。不要指望程式碼執行時會拋出異常。

自己實作Array群組轉換成List

#有時候解決問題,使用我們自己的實作方案是更好的。下面是將java陣列轉換成List的簡單範例:

public class Test {
   public static void main(String[] args) {
      String[] myArray = { "Apple", "Banana", "Orange" };
      List<String> myList = new ArrayList<String>();
      for (String str : myArray) {
         myList.add(str);
      }
      System.out.println(myList.size());
   }
}
登入後複製

程式碼的預期輸出是3.因為邏輯執行完集合了有3個元素。

我們程式碼的負面是程式碼更長了,而且我們在重複造輪子。好處就是當我們的需求改變時,我們可以順應自訂。例如:下面的程式碼,每一個元素都被加到list中兩次

public class Test {
   public static void main(String[] args) {
      String[] myArray = { "Apple", "Banana", "Orange" };
      List<String> myList = new ArrayList<String>();
      for (String str : myArray) {
         myList.add(str);
         myList.add(str);
      }
      System.out.println(myList.size());
   }
}
登入後複製

輸出是6,因為陣列中的元素都被加兩次。下面是另一個將String陣列轉換成List 的範例:

public class Test {
   public static void main(String[] args) {
      String[] myArray = { "5", "6", "7" };
      List<Integer> myList = new ArrayList<Integer>();
      for (String str : myArray) {
         myList.add(Integer.valueOf(str));
      }
   }}
登入後複製

#解析陣列中的每個String並將其轉換為對應的Integer。結果清單將包含所有轉換後的整數。

推薦學習:java影片教學

以上是Java如何將陣列轉換成List? (程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:javadevnotes
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板