Arrays.asList(T... a)方法返回的List实际上是java.util.Arrays.ArrayList的一个实例,该类继承自java.util.AbstractList,并未独立实现java.util.List接口。由于其父类AbstractList中定义了remove等操作方法,因此该列表支持删除操作,但该实现具有局限性,底层基于传入的数组,不支持结构性修改,调用remove可能抛出UnsupportedOperationException。
1、 调用Arrays.asList生成的列表执行remove操作时,会抛出异常,因为该列表不支持修改操作。
2、 报错代码段
3、 }
4、 }
5、 通过将Arrays.asList(T... a)生成的List作为参数传递给新的java.util.ArrayList构造函数,即可轻松解决该问题。
6、 代码:
7、 }
8、 }
9、 原因剖析
10、 java.util.Arrays.ArrayList与java.util.ArrayList所实现的接口存在差异,前者不支持增删操作,后者是完整实现List接口的可变列表。
11、 ArrayList 是 List 接口的一个实现类,用于存储有序可重复的元素集合。
12、 java.util.Arrays.ArrayList类所继承的AbstractList中的remove方法并未实现List接口中定义的删除操作逻辑,导致调用该方法时会抛出不支持操作异常,无法正常执行元素移除功能。
13、 java.util.Arrays.ArrayList 实现了 List、RandomAccess、Serializable 和 Cloneable 接口。
14、 在java.util.AbstractList抽象类中,remove方法的默认实现会直接抛出UnsupportedOperationException异常。
15、 代码原稿
16、 }
17、 ArrayList 实现了 List 接口,支持动态数组操作。
18、 ArrayList的remove方法通过索引移除元素,后续元素前移,大小减一,并返回被移除的元素。
评论
更多评论