注意
(1)該方法適用於對象型數據的數組(String、Integer…)
(2)該方法不建議使用於基本數據類型的數組(byte,short,int,long,float,double,boolean)
(3)該方法將數組與List列表鏈接起來:當更新其一個時,另一個自動更新
(4)不支持add()、remove()、clear()等方法
(5)此方法得到的List長度是不可變的
(6)asList返回的是java.util.Arrays.ArrayList,而不是java.util
傳遞的數組必須是對象數組,而不是基本類型
public class Demo {
public static void main(String[] args) {
int[] myArray = { 1, 2, 3 };
List myList = Arrays.asList(myArray);
System.out.println("myList.size():" + myList.size());
System.out.println("myList.get(0):"+ myList.get(0));
int [] array=(int[]) myList.get(0);
System.out.print("array:");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+",");
}
System.out.println();
System.out.println(myList.get(1));
}
}
輸出結果
myList.size():1
myList.get(0):[I@1b6d3586
array:1,2,3,
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at java.util.Arrays$ArrayList.get(Arrays.java:3841)
at fking.Demo.main(Demo.java:26)
不支持add()、remove()、clear()等方法
public class Demo1 {
public static void main(String[] args) {
List myList = Arrays.asList(1, 2, 3);
// myList.add(4);//運行時報錯:UnsupportedOperationException
// myList.remove(1);//運行時報錯:UnsupportedOperationException
// myList.clear();//運行時報錯:UnsupportedOperationException
}
}
這三個分別解除註釋輸出結果
Exception in thread "main" java.lang.UnsupportedOperationException
asList返回的是java.util.Arrays.ArrayList,而不是java.util
public class Demo2 {
public static void main(String[] args) {
List myList = Arrays.asList(1, 2, 3);
System.out.println(myList.getClass());//class java.util.Arrays$ArrayList
}
}
輸出結果
class java.util.Arrays$ArrayList
幾種將數組轉換爲ArrayList
public class Demo3 {
public static void main(String[] args) {
//方法一
List list = new ArrayList<String>(Arrays.asList("a", "b", "c"));
//方法二使用collect
Integer [] myArray = { 1, 2, 3 };
List list2 = Arrays.stream(myArray).collect(Collectors.toList());
//基本類型也可以實現轉換(依賴boxed的裝箱操作)
int [] myArray2 = { 1, 2, 3 };
List list3 = Arrays.stream(myArray2).boxed().collect(Collectors.toList());
//方法三
// 需要導入google guava工具包
//<dependency>
// <groupId>com.google.guava</groupId>
// <artifactId>guava</artifactId>
// <version>18.0</version>
//</dependency>
String[] aStringArray = new String[]{"a", "b", "c"};
//不可變數組
List<String> list4 = ImmutableList.of("string", "elements"); // from varargs
List<String> list5 = ImmutableList.copyOf(aStringArray); // from array
List<String> aStringCollection = new ArrayList<>();
aStringCollection.add("a");
aStringCollection.add("b");
aStringCollection.add("c");
//可變數組
List<String> list6 = Lists.newArrayList(aStringCollection); // from collection
List<String> list7 = Lists.newArrayList(aStringArray); // from array
List<String> list8 = Lists.newArrayList("or", "string", "elements"); // from varargs
//方法四
// 需要導入Apache Commons Collections工具包
//<dependency>
// <groupId>org.apache.commons</groupId>
// <artifactId>commons-collections4</artifactId>
// <version>4.4</version>
//</dependency>
List<String> list9 = new ArrayList<>();
CollectionUtils.addAll(list9, aStringArray);
}
}
總結
傳遞的數組必須是對象數組,而不是基本類型
如果只是用來遍歷,就用Arrays.asList()
如果要添加或刪除元素,則選擇new一個java.util.ArrayList
如果大家對java架構相關感興趣,可以關注下面公衆號,會持續更新java基礎面試題, netty, spring boot,spring cloud等系列文章,一系列乾貨隨時送達, 超神之路從此展開, BTAJ不再是夢想!