java 集合容易犯的错误

 

  String[] ss=new String[]{"a","b"}; 

 List<String> list= Arrays.asList(ss);

 list.add("dd");

 for(String s:list)

 {

 System.out.println(s);

 }

这段代码 会抛出

 

Exception in thread "main" java.lang.UnsupportedOperationException

 

原因是asList返回的不是一个我们常用的ArrayList,只是一个内部类。

仅仅是把一个数组以List的现实表示,内部还是一个数组,还是仅仅有数组

的一些功能。

 

add的方法就直接抛出异常了。。

 

 

asList的作用只是为了 方便使用。

 

底层仍然是一个数组,保持数组能拥有的所有操作。 
比如修改某一个元素,或者遍历。 
但是不能够改变长度。 
只是以List形态出现,为了某些仅对List读操作的方法可以顺利的执行。

 

 

 

可以用这种方式去实现

 

  String[] ss=new String[]{"a","b"}; 

  List<String> list=new ArrayList<String>();

          list.addAllI( Arrays.asList(ss););

 

  list.add("dd");

  for(String s:list)

  {

  System.out.println(s);

  }

 

 

还有就是 数组不可以强制转换

 Object[]  os=new Object[]{"a","b"};

 String[]  ss=(String[]) os;

这样也会报错:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

at com.sunline.flow.ide.project.navigator.Test.main(Test.java:42)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值