Java中关于Arrays.asList()的操作
我们可以通过Arrays.asList() 产生一个List,但是要记住,我们通过Arrays.asList产生的list是基于一个固定大小的数组的, 仅支持那些不会改变数组大小的操作。所以我们在使用时要时刻记住,以免出现不可预料的错误。
如果我们想要得到一个可以操作的List可以通过将Arrays.asList获得的list作为构造器的参数传进ArrayList中,或者通过使用addAll方法添加进去,即可。
示例:
import java.util.AbstractList; import java.util.AbstractMap; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; public class Test{ public static void test(String msg, List<String> list){ Collection<String> c = list; Collection<String> sublist = list.subList(1, 3); Collection<String> c2 = new ArrayList<String>(sublist); System.out.println("------" + msg + "--------"); try{ c.removeAll(c2); }catch(Exception e) { System.out.println("removeAll : " + e); } try{ c.retainAll(c2); }catch(Exception e) { System.out.println("retainAll : " + e); } try{ c.clear(); }catch(Exception e) { System.out.println("clear : " + e); } try{ c.add("XXX"); }catch(Exception e) { System.out.println("add : " + e); } try{ c.addAll(c2); }catch(Exception e) { System.out.println("addAll : " + e); } try{ c.remove("X"); }catch(Exception e) { System.out.println("remove : " + e); } try{ list.set(0, "XYZ"); }catch(Exception e) { System.out.println("list.set : " + e); } } public static void main(String[] args) { List<String> list = Arrays.asList("A B C D E F G H B I HIK HKI GG".split(" ")); test("Modifiable1", new ArrayList<String>(list)); List<String> list2 = new ArrayList<String>(); list2.addAll(list); test("Modifiable2", list2); Collections.addAll(list2, "A B C D E F G H B I HIK HKI GG".split(" ")); test("Modifiable3", list2); test("Arrays.asList", list); test("unmodifiableList()", Collections.unmodifiableList(list)); } } 输出: ------Modifiable1-------- ------Modifiable2-------- ------Modifiable3-------- ------Arrays.asList-------- removeAll : java.lang.UnsupportedOperationException retainAll : java.lang.UnsupportedOperationException clear : java.lang.UnsupportedOperationException add : java.lang.UnsupportedOperationException addAll : java.lang.UnsupportedOperationException ------unmodifiableList()-------- removeAll : java.lang.UnsupportedOperationException retainAll : java.lang.UnsupportedOperationException clear : java.lang.UnsupportedOperationException add : java.lang.UnsupportedOperationException addAll : java.lang.UnsupportedOperationException remove : java.lang.UnsupportedOperationException list.set : java.lang.UnsupportedOperationException