黑马程序员技术交流社区

标题: 都来瞅瞅,到底那里有了差错? [打印本页]

作者: jiangweibin2573    时间: 2014-8-12 01:03
标题: 都来瞅瞅,到底那里有了差错?

  1.         public static void main(String[] args) {
  2.                 String[] arr = {"a","b","c","d"};
  3.                 List<String> list = Arrays.asList(arr);
  4.                 list.add("e");
  5.                 System.out.println(list);
  6.         }
  7. 这个为什么运行不了了?那里除了差错呢!
复制代码

作者: hejinzhong    时间: 2014-8-12 01:04
本帖最后由 hejinzhong 于 2014-8-12 01:28 编辑

根据楼上思路:
  1. List<String> list = Arrays.asList(arr);
复制代码

Arrays.asList()会返回一个ArrayList对象,该ArrayList类是Arrays的一个私有静态类,而不是java.util.ArrayList类,java.util.Arrays.ArrayList类有set()、get()、contains()方法,但是没有增加元素的方法,所以它的大小是固定的.
想要创建一个真正的ArrayList类,你应该这样做:
  1. ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(arr));
复制代码

ArrayList的构造方法可以接受一个集合类型,刚好它也是java.util.Arrays.ArrayList的超类。


作者: 790324255a    时间: 2014-8-12 01:11
不能直接添加 Arrays.asList(arr);返回的java.util.Arrays$ArrayList  不是Arraylist 得转化下 List<String> list2=new ArrayList<String>(list);
作者: masai158    时间: 2014-8-12 01:23
转成List不可以增删。。
作者: hejinzhong    时间: 2014-8-12 01:27
masai158 发表于 2014-8-12 01:23
转成List不可以增删。。

貌似可以删除
作者: 一顿一只牛    时间: 2014-8-12 01:27
Arrays.asList(arr)底层是数组,长度已经固定了,不能进行增删
作者: 草鱼狂飙    时间: 2014-8-12 07:52
java.lang.UnsupportedOperationException
不支持的操作类型,因为Arraylist的asList(T... a) 返回一个受指定数组支持的固定大小的列表。
大小已经固定,当然不能进行增加元素操作。

其实aslist就是对数组的一个包装而已。
作者: 李文方    时间: 2014-8-12 08:11
数组转成集合,貌似不可用集合的增删方法,因为数组的长度是固定的,如果使用了增删方法,会报unsupportedOperationException
作者: masai158    时间: 2014-8-12 09:02
hejinzhong 发表于 2014-8-12 01:27
貌似可以删除

你直接  asList  转的集合,你仔细看看能否增删

  1.                 List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
  2.                 stooges.remove("Moe");
  3.                 System.out.println(stooges);
  4.                
  5.                 ArrayList<String> stooges1 = new ArrayList<String>(Arrays.asList("Larry", "Moe", "Curly"));
  6.                 stooges1.remove("Moe");
  7.                 System.out.println(stooges1);
复制代码


请问这2个代码的区别在哪里
作者: 18334705181    时间: 2014-8-12 09:07
看看,初级学习一下
作者: a6511631    时间: 2014-8-12 09:19
hejinzhong 发表于 2014-8-12 01:04
根据楼上思路:

Arrays.asList()会返回一个ArrayList对象,该ArrayList类是Arrays的一个私有静态类,而不 ...

十分到位,学习了
作者: 怀念黑海岸    时间: 2014-8-12 10:51
看了半天准备回答,一看楼上的都说的干脆利落,还是匿了吧。。




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