Arrays.asList()返回的List不能add和remove
来源:互联网 发布:python 定义类 编辑:程序博客网 时间:2024/06/05 09:56
今天在阅读java编程思想P220的时候看到一句话
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
at com.cqw.collections.TestasList.main(TestasList.java:10)
内心:
???
ArrayList还有这种操作?连add都不给我用了?
找了半天,没找到
???
难道在父类AbstractList里面?而这个假ArrayList并没有重写??
于是乎就点进了
它的父类AbstractList,偷窥它的源码,刚点开鼠标滑了一下就看到了这狗贼的add方法
终于找到罪魁祸首了。
总结原因就是Arrays的内部类ArrayList并没有重写它的父类AbstractList的add(E e)方法,所以在我开头的代码调用List.add(4)时,实际是调用了AbstractList的add方法,于是就抛异常。
“如果你试图用add()或delete()方法在这种列表中添加或删除元素就有可能会引发去改变数组尺寸的尝试,因此你将在运行时获得"Unsupported Operation"错误”
我查了查文档,Arrays.asList()方法描述如下:
返回值:List<T>
描述:Returns a fixed-size list backed by the specified array.
中文意思是:通过特定的数组返回一个固定长度的list
脑子里第一个想法是:List不是应该自动扩容吗,为什么数组长度会固定了?我不信,我得试一下。
import java.util.Arrays;import java.util.List;public class TestasList {public static void main(String[] args) {List list = Arrays.asList(1,2,3);list.add(4);}}
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
at com.cqw.collections.TestasList.main(TestasList.java:10)
果不其然抛出了unsupportedOperation异常,百思不得其解,只能看源码了,于是对准asList方法一个Ctrl+鼠标左击,就进入到Arrays.asList()
public static <T> List<T> asList(T... a) { return new ArrayList<>(a); }
内心:
???
ArrayList还有这种操作?连add都不给我用了?
仔细往下看:
private static class ArrayList<E> extends AbstractList<E>{...}
原来此ArrayList非彼ArrayList,是Arrays自己定义的内部类。
找了半天,没找到
???
难道在父类AbstractList里面?而这个假ArrayList并没有重写??
于是乎就点进了
它的父类AbstractList,偷窥它的源码,刚点开鼠标滑了一下就看到了这狗贼的add方法
public boolean add(E e) { add(size(), e); return true; }再跟踪里面重载的add方法
public void add(int index, E element) { throw new UnsupportedOperationException(); }
终于找到罪魁祸首了。
总结原因就是Arrays的内部类ArrayList并没有重写它的父类AbstractList的add(E e)方法,所以在我开头的代码调用List.add(4)时,实际是调用了AbstractList的add方法,于是就抛异常。
阅读全文
0 0
- Arrays.asList()返回的List不能add和remove
- Arrays.asList() 返回的list不能add,remove
- Arrays.asList() 返回的list不能add,remove
- Arrays.asList方法返回的List不能执行add、remove操作
- Arrays.asList() 返回的list不能add,remove以及慎用java.util.Collections.copy()方法
- # Arrays.asList 返回的list 不能使用 add,set,remove 方法
- Arrays.aslist新建的list集合不能add(),set(),remove()你知道吗?
- 为什么Arrays.asList(T...t)不能add和remove?
- Arrays.asList()为什么不能支持add()和remove()
- Arrays.asList不能remove、add等,抛UnsupportedOperationException
- Arrays.asList()返回的List特点
- Arrays.asList()返回只读的List
- 关于 Arrays.asList add、remove 操作的 UnsupportedOperationException
- 为什么Java里的Arrays.asList不能用add和remove方法?
- 为什么Java里的Arrays.asList不能用add和remove方法?
- 10062---为什么Java里的Arrays.asList不能用add和remove方法?
- 为什么Java里的Arrays.asList不能用add和remove方法?
- Arrays.asList获取的list不可以直接使用remove
- 第二阶段 HTML5基础
- Python3.3 邮件发送 含附件(各种类型文件)
- angular-cli 安装与使用
- linux下ftp服务器的安装与登录
- 程序和软件有何不同
- Arrays.asList()返回的List不能add和remove
- ZooKeeper简介
- Spring MVC 中的DispatcherServlet文件与Controller类中可以使用的注解
- 洛谷1130红牌
- BZOJ1083: [SCOI2005]繁忙的都市
- 堆内存和栈内存详解
- ubuntu17.04安装tensorflow1.3(GPU)详解
- 二本院校找java实习的艰辛路
- ajax基础用法