当前位置: 首页 > news >正文

教学网站建设 效益python语言好学吗

教学网站建设 效益,python语言好学吗,农村自建房设计图软件,汽车建设网站一.Arrays.asList() 返回的list不能add,remove Arrays.asList()返回的是List,而且是一个定长的List,所以不能转换为ArrayList,只能转换为AbstractList 原因在于asList()方法返回的是某个数组的列表形式,返回的列表只是数组的另一个视图,而数组本身并没…

一.Arrays.asList() 返回的list不能add,remove

Arrays.asList()返回的是List,而且是一个定长的List,所以不能转换为ArrayList,只能转换为AbstractList

原因在于asList()方法返回的是某个数组的列表形式,返回的列表只是数组的另一个视图,而数组本身并没有消失,对列表的任何操作最终都反映在数组上. 所以不支持remove,add方法的

下面是一段很简单的测试代码:  

public class MainFacade {  public static void main(String[] args) {  List<Integer> list = Arrays.asList(1,2,3);  list.add(5);  System.out.print(list.toString());  }  
}  

不过上面的代码会throw出一个UnsupportedOperationException这样的异常  

Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.add(AbstractList.java:148) at java.util.AbstractList.add(AbstractList.java:108) at org.popkit.MainFacade.main(MainFacade.java:14) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)  


终其原因是Arrays.asList方法返回的ArrayList是继承自AbstractList同时实现
了RandomAccess和Serializable接口,定义如下:  

private static class ArrayList<E> extends AbstractList<E>  implements RandomAccess, java.io.Serializable  

我们再来看看AbstractList这个类的定义:  

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>   

这时我们发现AbstractList这个类的set add remove方法定义如下:

public void add(int index, E element) {  throw new UnsupportedOperationException();  
}  public E set(int index, E element) {  throw new UnsupportedOperationException();  
}  public E remove(int index) {  throw new UnsupportedOperationException();  
}  

现在知道了它throw UnsupportedOperationException异常的原因了。  

通过上面的分析,我们知道,其实通过asList方法得到的List是只读的,那么平时我们怎样避免这样的错误发生?我们可以采用如下方法: 

List<Integer> list = new ArrayList<>(Arrays.asList(1,2,3));  

二、Arrays.asList()陷阱

代码如下: 

Java代码  

public static void main(String[] args) {  int[] data = {1,2,3,4,5};  List list = Arrays.asList(data);  System.out.println("列表中的元素数量是:" + list.size());  }  


  注意这里输出的数量是1,原因是,在Arrays.asList中,其接收的参数原型其实是泛型变长参数来的,而基本类型是不能作为范型的参数,按道理应该使用包装类型,但这里缺没有报错, 
因为数组是可以泛型化的,所以转换后在list中就有一个类型为int的数组 

Java代码  

        int[] data = {1,2,3,4,5};  List list = Arrays.asList(data);  System.out.println("元素类型:" + list.get(0).getClass());  System.out.println("前后是否相等:"+data.equals(list.get(0)));  


  可以看到,输出的为元素类型:class [I  
因为jvm不可能输出array类型,array类型属于java.lang.reflect包,通过反射访问 
数组的这个类,编译时候生成的。所以要改为: 

Java代码  

Integer[] data = {1,2,3,4,5};  
List list = Arrays.asList(data);  
System.out.println("列表中的元素数量是:" + list.size());  


 此外,假如如下代码: 

Java代码  

//枚举,声明一个星期  
enum Week{Sun,Mon, Tue, Wed,Thu,Fri,Sat}      
public static void main(String[] args) {  //工作日  Week[] workDays = {Week.Mon, Week.Tue, Week.Wed,Week.Thu,Week.Fri};  //转换为列表  List<Week> list = Arrays.asList(workDays);  //增加周六也为工作日  list.add(Week.Sat);  


 注意这里用add会出错,因为是arrays.aslist中,看代码可以看到这里返回的 
ArrayList不是原来的传统意义上的java.util.arraylist了,而是自己工具类的一个 
静态私有内部类,并没有提供add方法,要自己实现,所以这里是出错了,因此, 
除非确信array.aslist后长度不会增加,否则谨慎使用: 
   List<String> abc=Arrays.asList("a","b","c"),因为这样的长度是无法再add的了 

http://www.yayakq.cn/news/469419/

相关文章:

  • 外贸建站是什么意思百度网页版游戏
  • 杭州专门做网站网站建设技术服务计入什么科目
  • 体育西网站开发已有域名 搭建网站
  • 视频公司的网站设计广州网站运营专业乐云seo
  • 网站流量监控产品设计排版
  • 聊城东昌府区建设路小学网站长沙制作手机网站的公司
  • 网站电脑端和手机端资讯类网站怎么做
  • 有网页源码怎么做网站学习做网页的网站
  • 网站设计兼容模式wordpress媒体库图片不显示
  • 一站式发稿平台免费h5响应式网站搭建
  • 做资源网站自己可以开发一个软件吗
  • 重庆建设摩托车官方网站素材网站的下载服务器怎么做
  • 重庆建设招标网站广元市建设局网站首页
  • 大港油田建设官方网站视频剪辑培训班学费一般多少
  • 做八年级题目的网站河源盛世网站建设
  • app定制开发网站制作没后台的网站怎么做优化
  • 网站设计任务书范文废旧电脑做网站服务器
  • 虚拟技术对网站建设维护的影响国内最好的分销平台
  • 山西大同专业网站建设价格做网站从什么做起
  • 有自己域名主机怎么做网站北京网站域名备案
  • 青岛网站制作百家号网站开发是怎么样的
  • 淄博网站制作服务推广2323wan网页游戏
  • 网站开发掌握哪种语言赣州章贡区最新招聘信息
  • 上海美容网站建设wordpress页面模板对应
  • 网站制网站制作公司超级seo工具
  • 莆田做网站做书评的网站有哪些
  • 文化建设意义湛江网站seo
  • 深圳建模板网站桂林市是几线城市
  • 网站建设首选玖艺建站信得过wordpress 全站404
  • 天津哪里有做网站的做服装搭配图的网站