Java數組轉集合之Arrays.asList()用法


Arrays.asList()用法

使用Arrays.asList()的原因無非是想將數組或一些元素轉為集合,而你得到的集合並不一定是你想要的那個集合。

而一開始asList的設計時用於打印數組而設計的,但jdk1.5開始,有了另一個比較更方便的打印函數Arrays.toString(),於是打印不再使用asList(),而asList()恰巧可用於將數組轉為集合。

public class App {
  public static void main(String[] args) {
    List<String> stringA = Arrays.asList("A");
    String[] stringArray = {"B"};
    List<String> stringB = Arrays.asList(stringArray);
 
    System.out.println(stringA);
    System.out.println(stringB);
  }
}

  運行結果

[A]
[B]
public class App {
  public static void main(String[] args) {
    int[] intarray = {1, 2, 3, 4, 5};
    //List<Integer> list = Arrays.asList(intarray); 編譯通不過
    List<int[]> list = Arrays.asList(intarray);
    System.out.println(list);
  }
}
 
output:
[[I@66d3c617]

你是不是以為上面 👆那個 list 是 java.util.ArrayList ?

 實際上返回的是:java.util.Arrays.ArrayList

源碼:

但它和ArrayList貌似很像唉!有什么不同嗎?

不同之處:

Arrays.ArrayList 是工具類 Arrays 的一個內部靜態類,它沒有完全實現List的方法,而 ArrayList直接實現了List 接口,實現了List所有方法。

 

 

 

  • 長度不同 和 實現的方法不同

    Arrays.ArrayList是一個定長集合,因為它沒有重寫add,remove方法,所以一旦初始化元素后,集合的size就是不可變的。

  • 參數賦值方式不同

Arrays.ArrayList將外部數組的引用直接通過“=”賦予內部的泛型數組,所以本質指向同一個數組。

ArrayList是將其他集合轉為數組后copy到自己內部的數組的。

所以使用Arrays.asList()需要注意以下兩點。

一、不能把基本數據類型轉化為列表

仔細觀察可以發現asList接受的參數是一個泛型的變長參數,而基本數據類型是無法泛型化的,如下所示:

  public  class  App {
   public  static  void  main(String[] args) {
     int [] intArray = { 1 2 3 4 };
     List<Integer> list = Ints.asList(intArray);
     list.set( 0 100 );
     System.out.println(Arrays.toString(intArray));
     list.add( 5 );
     list.remove( 0 );
 
   }
}

  這是因為把int類型的數組當參數了,所以轉換后的列表就只包含一個int[]元素。

要想把基本數據類型的數組轉化為其包裝類型的list,可以使用guava類庫的工具方法,示例如下:

int[] intArray = {1, 2, 3, 4};

List<Integer> list = Ints.asList(intArray);

支持基礎類型的方式

1、如果使用Spring

 

2、如果使用Java 8

數組轉ArrayList

1、遍歷轉換 

 

2、使用工具類

3、如果使用Java 8

既可以用於基本類型也可以返回想要的集合。

 自己比較常用

int a [] ={1,2,3};

List<Integer> ilist = Arrays.stream(a).boxed()
.collect(Collectors.toList());
System.out.println(ilist);

  

4、兩個集合類結合

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM