※更方便的判斷
int i = 1; if (i == 1 || i == 3 || i == 4 || i == 6) { // ... } // 使用 Arrays.asList List<?> list = Arrays.asList(1, 3, 4, 6); int i = 1; if (list.contains(i)) { // ... }
※使用 Arrays.asList 可以很輕鬆的判斷
※使用某些方法會有例外
List<Integer> list = Arrays.asList(1,2,3); list.add(4);
※執行時拋出了「java.lang.UnsupportedOperationException」
※這是因為 return 是回傳 java.util.Arrays 的私有類別 ArrayList,裡面並沒有add方法,所以會到他的父類別 AbstractList 裡去找,會先找到一個參數的 add,然後繼續呼叫兩個參數的 add,然後直接 new UnsupportedOperationException(),可以看到 remove 、set 方法也是一樣
※所以只要私有類別 ArrayList 沒有實作,且父類也都沒實作,也就是只有部分實作,如果使用到沒實作的方法,就會報例外
※AbstractList 有實作 List,所以可以用 List 接值
※如果一定要使用 add 等方法,只好另外宣告了,如下:
List<Integer> list = Arrays.asList(1, 3, 4, 6); List<Integer> list2 = new ArrayList<>(); list2.addAll(list); list2.add(7); System.out.println(list2);
※此時泛型不能用 「?」
List 有一個 subList 方法,產生新的 List 後,對新舊增刪改都會影響到兩個 List,所以也是建議用讀的方式就好,甚至新集合的 size 大於舊集合也是執行期報錯
沒有留言:
張貼留言