黑马程序员技术交流社区

标题: 数组转集合的代码疑问[已解决] [打印本页]

作者: 王自强    时间: 2012-9-1 00:16
标题: 数组转集合的代码疑问[已解决]
本帖最后由 王自强 于 2012-9-2 17:26 编辑
  1. import java.util.*;
  2. class test
  3. {
  4.         
  5.         public static void main(String[] args)
  6.         {
  7.                 Integer[] nums = {2,4,5};               
  8.                 List<Integer> li = Arrays.asList(nums);

  9.                 Iterator<Integer> it = li.iterator();
  10.                 while(it.hasNext())
  11.                 {
  12.                         it.remove();//这里怎么错了?为什么不能进行删除操作?
  13.                 }
  14.         }

  15. }
复制代码

为什么数组转集合后就不能对元素增删了呢?求解释...

作者: 袁艳超    时间: 2012-9-1 01:08
首先说明一下,Arrys.asList();方法返回的不是平常熟悉的java.util.ArrayList类的对象.
而是Arrays类的内部类的对象,而Arrays类里的内部类ArrayList也是实现AbstractList类.
remove,add等方法在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作.
ArrayList 覆盖这些方法来对list进行操作,但是Arrays类的内部类的对象没有覆盖remove(),add()等方法;
解决方法是使用Iterator,或者转换为ArrayList
List list= new ArrayList(li);

当没有调用过 next 方法,或者在上一次调用 next 方法之后已经调用了 remove 方法就会抛出java.lang.UnsupportedOperationException


作者: 芦曦    时间: 2012-9-1 01:43
List<Integer> li = Arrays.asList(nums);
你用的是Arrays类中的asList方法,asList得到的数组是没有添加和删除方法的。
作者: 王金科    时间: 2012-9-1 01:46
asList
public static <T> List<T> asList(T... a)返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直接写”到数组。)此方法同 Collection.toArray() 一起,充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。返回的列表是可序列化的,并且实现了 RandomAccess。
此方法还提供了一个创建固定长度的列表的便捷方法,该列表被初始化为包含多个元素:

     List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
返回一个受指定数组支持的固定大小的列表
所以不能进行add()和remove()




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