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)
?