参考连接:阿里巴巴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>的几种用法:接口