在我们日常工作中,经常需要把数组转换成List集合。
因为数组的长度是固定的,不太好扩容,而List的长度是可变的,它的长度会根据元素的数量动态扩容。
在JDK的Arrays类中提供了asList方法,可以把数组转换成List
List< String > list = Arrays.asList(“a”,“b”,“c”);
注意:
1、该方法适用于对象型数据的数组(String、Integer…)
2、该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean)
3、该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新
4、不支持add()、remove()、clear()等方法
正例:
String [] array = new String [] {"a","b","c"};
List<String> list = Arrays.asList(array);
for (String str : list) {
System.out.println(str);
}
在这个例子中,使用Arrays.asList方法将array数组,直接转换成了list。然后在for循环中遍历list,打印出它里面的元素。
如果转换后的list,只是使用,没新增或修改元素,不会有问题。
String[] array = new String[]{"a", "b", "c"};
List<String> list = Arrays.asList(array);
list.add("d");
for (String str : list) {
System.out.println(str);
}
执行结果:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at com.sue.jump.service.test1.Test2.main(Test2.java:24)
会直接报UnsupportedOperationException异常。
原因:
使用Arrays.asList方法转换后的ArrayList,是Arrays类的内部类,并非java.util包下我们常用的ArrayList。
Arrays类的内部ArrayList类,它没有实现父类的add和remove方法,用的是父类AbstractList的默认实现。
我们看看AbstractList是如何实现的:
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
public E remove(int index) {
throw new UnsupportedOperationException();
}
该类的add和remove方法直接抛异常了,因此调用Arrays类的内部ArrayList类的add和remove方法,同样会抛异常。