java Arrays.asList方法注意事項

1. 簡介java

Arrays.asList()方法能夠將數組轉化爲長度固定的列表。數組

該方法強調了列表的長度是固定的,所以不能使用list的add和remove方法修改list長度。spa

2. 示例code

 1 import java.util.*;
 2 
 3 public class ListFunc1 {
 4     public static void main(String[] args){
 5 
 6         Integer[] array1 = new Integer[]{1,2,3,4};
 7         List<Integer> list1 = Arrays.asList(array1);
 8         list1.set(0,0);
 9 //        list1.add(5);                  // (1)
10 //        list1.remove(2);              // (2)
11         System.out.println(list1);
12 
13         /*
14         * ArrayList(Collection<? extends E> c)
15         * 按照集合的迭代器返回的順序構造一個包含指定集合元素的列表
16         * */
17         Integer[] array2 = new Integer[]{1,2,3,4};
18         List<Integer> list2 = new ArrayList<>(Arrays.asList(array2));   // (3)
19         list2.set(0,0); 
20         list2.add(5);
21         list2.remove(2);
22         System.out.println(list2);    // [1, 2, 4, 5] 23     }
24 }

示例說明以下:blog

(1)使用add()方法時將會拋出異常:Exception in thread "main" java.lang.UnsupportedOperationException;element

         源碼以下,能夠發現使用add方法時將會直接拋出異常。rem

1  public boolean add(E e) {
2         add(size(), e);
3         return true;
4  }
5 
6 public void add(int index, E element) {
7         throw new UnsupportedOperationException();
8 }

(2)使用remove()方法時將會拋出異常:Exception in thread "main" java.lang.UnsupportedOperationException;源碼

         源碼以下,能夠發現使用remove方法時將會直接拋出異常。io

1 public E remove(int index) {
2         throw new UnsupportedOperationException();
3 }

(3)若是想要修改由數組轉換而成的列表,能夠使用ArrayList(Collection<? extends E> c)構造器,class

        新建一個列表便可,構造器的參數爲集合。

 1 import java.util.*;
 2 
 3 public class Main1 {
 4     public static void main(String[] args){
 5 
 6         /* Arrays.asList()構建列表
 7         * 列表長度不可變,即不能夠add和remove
 8         * */
 9         int[] intArray1 = new int[]{5, 7};
10         List<int[]> intList1 = Arrays.asList(intArray1);
11         System.out.println(intList1);   // [[I@1540e19d]
12 
13         Integer[] intArray2 = new Integer[]{5, 7};
14         List<Integer> intList2 = Arrays.asList(intArray2);
15         //        intList2.add(3);              // error
16         System.out.println(intList2);   // [5, 7]
17 
18 
19 
20         /* 使用ArrayList(Collection<? extends E> c)構建列表
21         *  長度可變,便可以add和remove
22         * */
23         int[] intArray = new int[]{2, 4};
24         List<int[]> intList = new ArrayList<>(Arrays.asList(intArray));
25         System.out.println(intList);    // [[I@1540e19d]
26 
27         Integer[] integerArray = new Integer[]{1,3};
28         List<Integer> integerList = new ArrayList<>(Arrays.asList(integerArray));
29         integerList.add(5);          // success
30         System.out.println(integerList);   // [1, 3, 5]
31     }
32 }

!!!

相關文章
相關標籤/搜索