最近在使用数组转集合时,须要对集合进行操做,发现一个问题,大概是这样的:java
@Test
public void arrayTest(){
String[] ids = new String[]{"1","2"};
List<String> idList = Arrays.asList(ids);
//我须要在这里操做这个集合
idList.add("3");
System.out.println(idList);
}
复制代码
看起来彷佛没什么问题,仅仅往list里面加了一项,不过度吧!可是,在我运行时倒是这样的:数组
shit! 怎么和我想的彻底不同呢?java.lang.UnsupportedOperationException
是个啥状况?没办法,只有去看一哈Arrays.asList()怎么实现的,代码以下:post
@SafeVarargs @SuppressWarnings("varargs") public static List asList(T... a) { return new ArrayList<>(a); }spa
new ArrayList<> 没毛病嘛!但当我点进去一看:3d
原来这个ArrayList并非咱们熟知的那个ArrayList,而是Arrays的一个内部类,它仅仅继承了AbstractList抽象类并重写了部分方法而已
,固然,这部分方法并不包括add(),因此当咱们调用add()时,会直接抛出unSuppostOption异常也就解释的通了! 为了解决这个问题,咱们能够经过new咱们要的那个ArrayList来解决,对,就是你想的那个:code
@Test
public void arrayTest(){
String[] ids = new String[]{"1","2","3"};
List<String> idList = new ArrayList<>(Arrays.asList(ids));
//我须要在这里操做这个集合
idList.add("3");
System.out.println(idList);
}
复制代码
OK,这样就搞定了cdn