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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王自强 中级黑马   /  2012-9-1 00:16  /  1654 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王自强 于 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. }
复制代码

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

3 个回复

倒序浏览
首先说明一下,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

回复 使用道具 举报
List<Integer> li = Arrays.asList(nums);
你用的是Arrays类中的asList方法,asList得到的数组是没有添加和删除方法的。
回复 使用道具 举报
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()
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马