【小测试2】写出此代码的执行结果,并解释原因 Array.asList
1 import java.util.Arrays;
2 import java.util.Iterator;
3 import java.util.List;
4 public class T
5 {
6 public static void main(String[] args) {
7 String[] strs = { "1" };
8 List l = Arrays.asList(strs);
9 try {
10 l.remove(0);
11 } catch (Exception ex) {
12 ex.printStackTrace();
13 } try {
14 Iterator it = l.iterator();
15 it.next();
16 it.remove();
17 } catch (Exception ex) {
18 ex.printStackTrace();
19 }
20 }
21}
使用Arrays.asLisvt()后调用add,remove这些method时出现java.lang.UnsupportedOperationException异常。这是由于:
Arrays.asLisvt()
返回java.util.Arrays$ArrayList,
而不是ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList,remove,add等
method在AbstractList中是默认throw
UnsupportedOperationException而且不作任何操作。ArrayList
override这些method来对list进行操作,但是Arrays$ArrayList没有override
remove(int),add(int)等,所以throw UnsupportedOperationException。
解决方法是使用Iterator,或者转换为ArrayList
楼主::我也贴一个完整的。 4楼的不全面。甚至有错误!//不明白为什么这么说,其他人大多同意是正确的这一说法
Arrays.asList 中返回的是其内部类简化实现的 List,而这个 List 并没实现 remove
方法,甚至连 add 都没有实现,而仅仅使用了一个普通的数据作为存储,这时就使用默
认的AbstractList 中的 add 和 remove 方法因此并不能像 ArrayList 那样能修改其内
部的长度,而使用 add 和 remove 方法。