參考連接:阿里巴巴Java開發手冊終極版v1.3.0java
【強制】使用工具類 Arrays.asList()把數組轉換成集合時,不能使用其修改集合相關的方 法,它的 add/remove/clear 方法會拋出 UnsupportedOperationException 異常。 說明:asList 的返回對象是一個 Arrays 內部類,並無實現集合的修改方法。Arrays.asList 體現的是適配器模式,只是轉換接口,後臺的數據還是數組。 String[] str = new String[] { "you", "wu" }; List list = Arrays.asList(str); 第一種狀況:list.add("yangguanbao"); 運行時異常。 第二種狀況:str[0] = "gujin"; 那麼 list.get(0)也會隨之修改。
使用Array.asList()初始化一個List集合,就不能再添加新的元素,由於初始化的是一個固定大小的數組,來看Arrays源碼。數組
List<String> seasons = Arrays.asList("Spring", "Summer", "Fall"); seasons.add("Winter"); System.out.println("seasons:"+seasons.toString());
運行結果:工具
Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.add(Unknown Source) at java.util.AbstractList.add(Unknown Source) at com.jerry.entity.ListDemo.main(ListDemo.java:10)
在Java 7之後,實現集合裏面沒必要寫明具體的元素類型。code
ArrayList的兩種用法:對象
package com.jerry.entity; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class ListDemo { public static void main(String[] args) { List<String> seasons = Arrays.asList("Spring", "Summer", "Fall"); // seasons.add("Winter"); // throw UnsupportedOperationException System.out.println("seasons:"+seasons.toString()); List<String> seasons2 = new ArrayList<>(seasons); seasons2.add("Winter"); System.out.println("seasons2:"+seasons2.toString()); List<String> seasons3 = new ArrayList<>(); seasons3.add("Spring"); seasons3.add("Summer"); seasons3.add("Fall"); seasons3.add("Winter"); System.out.println("seasons3:"+seasons3.toString()); // java 8 List<String> seasons4 = Stream.of("Spring", "Summer", "Fall").collect(Collectors.toList()); System.out.println("seasons4:"+seasons4.toString()); } }
運行結果:blog
seasons:[Spring, Summer, Fall] seasons2:[Spring, Summer, Fall, Winter] seasons3:[Spring, Summer, Fall, Winter] seasons4:[Spring, Summer, Fall]
List<String>的幾種用法:接口