A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 vaqh 于 2014-8-2 23:27 编辑

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

8 个回复

倒序浏览
穿了集合马甲的数组仍然是数组。数组长度不可变,其元素是不可以增删的

点评

总结相当精辟  发表于 2014-8-2 23:27
回复 使用道具 举报 2 0
fantacyleo 发表于 2014-8-2 21:04
穿了集合马甲的数组仍然是数组。数组长度不可变,其元素是不可以增删的

有一定道理,但是证据呢?
回复 使用道具 举报
底层仍是数组结构,所以。。。
回复 使用道具 举报
草鱼狂飙 发表于 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的操作实际上是作用于底层数组的
回复 使用道具 举报 1 0
返回的是 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:51
7#
icris 发表于 2014-8-2 22:09
返回的是 java.util.Arrays.ArrayList 而不是我们平常用的那个 ArrayList

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

这样啊,谢谢
回复 使用道具 举报
学习了。。。。。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马