黑马程序员技术交流社区

标题: 为什么数组变成集合过后,不可以使用集合的增删方法 [打印本页]

作者: vaqh    时间: 2014-8-2 20:58
标题: 为什么数组变成集合过后,不可以使用集合的增删方法
本帖最后由 vaqh 于 2014-8-2 23:27 编辑

为什么数组变成集合过后,不可以使用集合的增删方法???

作者: fantacyleo    时间: 2014-8-2 21:04
穿了集合马甲的数组仍然是数组。数组长度不可变,其元素是不可以增删的
作者: 草鱼狂飙    时间: 2014-8-2 21:18
fantacyleo 发表于 2014-8-2 21:04
穿了集合马甲的数组仍然是数组。数组长度不可变,其元素是不可以增删的

有一定道理,但是证据呢?
作者: star5603    时间: 2014-8-2 21:30
底层仍是数组结构,所以。。。
作者: fantacyleo    时间: 2014-8-2 21:49
草鱼狂飙 发表于 2014-8-2 21:18
有一定道理,但是证据呢?

证据就在API文档对asList方法的说明中:Returns a fixed-size list backed by the specified array. (Changes to the returned list "write through" to the array.)  返回值是基于原数组的固定长度的list,对list的操作实际上是作用于底层数组的
作者: icris    时间: 2014-8-2 22:09
返回的是 java.util.Arrays.ArrayList 而不是我们平常用的那个 ArrayList
  1. private static class ArrayList<E> extends AbstractList<E>
  2.         implements RandomAccess, java.io.Serializable
复制代码

它没有重写 add 和 remove 方法,它的父类 AbstractList 的remove 方法如下:
  1.     public E remove(int index) {
  2.         throw new UnsupportedOperationException();
  3.     }
复制代码

直接抛异常的。
解决方法:
  1. List<String> list = new ArrayList<String>(Arrays.asList(strings));
复制代码



作者: vaqh    时间: 2014-8-2 22:19
icris 发表于 2014-8-2 22:09
返回的是 java.util.Arrays.ArrayList 而不是我们平常用的那个 ArrayList

它没有重写 add 和 remove 方法 ...

这样啊,谢谢
作者: 止询初衷    时间: 2014-8-2 22:31
学习了。。。。。。。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2