【强制】使用工具类 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 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以后,实现集合里面不必写明具体的元素类型。
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 seasons = Arrays.asList("Spring", "Summer", "Fall");
//seasons.add("Winter"); // throw UnsupportedOperationException
System.out.println("seasons:"+seasons.toString());
List seasons2 = new ArrayList<>(seasons);
seasons2.add("Winter");
System.out.println("seasons2:"+seasons2.toString());
List seasons3 = new ArrayList<>();
seasons3.add("Spring");
seasons3.add("Summer");
seasons3.add("Fall");
seasons3.add("Winter");
System.out.println("seasons3:"+seasons3.toString());
// java 8
List seasons4 = Stream.of("Spring", "Summer", "Fall").collect(Collectors.toList());
System.out.println("seasons4:"+seasons4.toString());
}
}
运行结果:
seasons:[Spring, Summer, Fall]
seasons2:[Spring, Summer, Fall, Winter]
seasons3:[Spring, Summer, Fall, Winter]
seasons4:[Spring, Summer, Fall]
List的几种用法: