原标题:java List集合接口的坑

java推荐面向接口编程,我们一般写函数参数的时候总会选择接口的声明,然后根据接口的方法来进行操作。这里说说list的一个坑。

说起list的实现类,你一定能想到arraylist,linkedlist,还有一些并发安全集合copyonwritearraylist等等,今天说的list就是线程不安全的这些,这些集合基本上通过这个list接口就可以做到所有操作。久而久之给我们一种错觉就是只要符合我的list规范,里面的方法一定被实现好了。下面说一个特例,这个需要人为的去规避。

例子

能获取到List的对象也可以通过Arrays的public static T ListT asList(T... a);这个工具类。这个返回的List就比较有限制了。我们从代码来看。

public static T ListT asList(T... a) {

return new ArrayList(a);

}

从代码上可以看出是返回了一个arraylist对象,然后集合作为参数传入的。

仔细看就会发现这个ArrayList不是我们印象里的ArrayList,而是Arrays的一个内部类。

private static class ArrayListE extends AbstractListE

implements RandomAccess, java.io.Serializable

看类的声明好像没有什么问题,和其他的list的集合没有太多不同。但是里面实现的方法却有点少。只有下面几个。

那么也就是说他本身并没有实现add等操作的方法,那只能从父类AbstractList查找。下面列举几个方法的实现,都很简单。

public void add(int index, E element) {

throw new UnsupportedOperationException();

}

public void add(int index, E element) {

throw new UnsupportedOperationException();

}

方法的实现全部都是抛出不支持的异常。也就是说如果执行的add等操作得到的结果就是抛出异常。这个错误还是在编译期间不可知的。

java文档中则写了如下的内容:返回一个受指定数组支持的固定大小的列表。换句话说这样方法只是把你的数组包装成了一个List,操作上还是等同你直接使用数组,而且大小也是确定的,并不能做扩容等操作。

结论

我们使用接口作为方法的参数没有问题,这同样需要调用的人传入一个常用的集合,例如arraylist,linkedlist。对于其他形式返回出的list请看具体文档描述在操作,因为很可能里面少覆写了方法。对于数组想转换成list也建议使用常见集合的addAll的方法来做一次数据的另存为,虽然这样操作比直接要麻烦一些,但是为后面的操作提供了很大方便。返回搜狐,查看更多

责任编辑:

java list接口方法_java List集合接口的坑相关推荐

  1. java中result方法_java.sql.resultSet接口中有很多方法的实现

    接口是很重要的面向对象方式,继承接口的类不用全部实现定义的接口,可以这么说,我定义了好多接口,某个类可以这么实现这个接口,到另一个类你又想那么实现接口,都是可以的. 或者定义完接口不想管他都可以,虽然 ...

  2. java支持接口吗_java – 支持专用接口方法

    此支持允许接口的非抽象方法在它们之间共享代码.私有方法可以是静态的或实例的. 接口的私有方法可以是抽象的还是默认的? 我可以问一个例子,"私有静态接口方法"在代码方面是否有用? 解 ...

  3. java 子类必须实现_Java学习之接口的子类必须实现接口的全部方法吗?

    接口的子类必须实现接口的全部方法吗? 接口的子类必须实现接口中全部的方法吗?答案:不是.原因如下: 如果子类是非抽象类,则必须实现接口中的所有方法: 如果子类是抽象类,则可以不实现接口中的所有方法,因 ...

  4. java xml接口实例_Java访问WebService接口方法 , 返回xml数据,能根据 下面的能给我写个实例吗?略急...

    接口方法StringgetHolidayMsg(Stringkey,Stringflag,StringxmlMessage)参数说明keyXX提供给的key值,传入key值不正确不能正常提取数据,值为 ...

  5. java接口常用_java的常用接口

    Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements). 所有实现Collection接口的类 ...

  6. java多态和泛型_Java面向对象(二) 接口、多态和泛型

    一.接口 二.多态 多态是同一个行为具有多个不同表现形式或形态的能力. 2.1 类型转换 转换方式 隐式 向上转型 对于基本数据类型,存储容量低的可自动向存储容量高的类型转换 对于引用变量,子类可被转 ...

  7. java面向对象接口实现_Java面向对象之接口

    接口(interface): 接口的地位等同于class,换句话说接口中的所有方法都是抽象方法.在声明接口中的方法时,可以使用abstract关键字,也可以不适用,通常情况下,都会省略掉abstrac ...

  8. java 接口重写_java如何实现接口中的重写

    普通类implements接口 1.普通方法,抽象方法都得重写: 2.默认方法可重写,也可不重写. 抽象类implements接口 在线视频教程分享:java教学视频 由抽象类来实现接口,则不必重写接 ...

  9. java 内部类声明 抽象类_Java 抽象类、接口、内部类

    抽象类 当编写一个类时,常常会为该类定义一些方法,这些方法用以描述该类的行为方式,那么这些方法都有具体的方法体.但在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确地知道这些子类如何实 ...

最新文章

  1. 万维网与HTTP协议
  2. 【论文导读】DLP-KDD2019|BST---使用Transformer进行序列推荐
  3. AngularJS中ui-router全攻略
  4. Docker配置国内加速镜像源
  5. 辨异 —— 有两人生日在同一天、只有两人生日在同一天
  6. CSDN《程序员》杂志创始人 蒋涛推荐《程序员求职第一书》
  7. 数据可视化大屏案例系列 1
  8. 前端三大主流框架如何去选择?
  9. 服务器上phpstudy搭建网站,如何使用PHPstudy在本地搭建一个网站(最新图文教程)...
  10. IE8 正式版官方下载链接
  11. JAVA多线程并发之线程实现,4种线程池,终止线程4种方式
  12. win10修复计算机摁什么,编辑告诉你win10修复失败且无法进入系统的详尽处理步骤...
  13. 掌握python字符串容器_Python字符串容器,python
  14. 数据预处理 - 类型转换(离散型)
  15. Linux中断——request_irq
  16. unity游戏开发之令人上瘾的6大手游设计’潜规则’
  17. springboot基于微信小程序的校园外卖系统毕业设计源码091024
  18. android eth0静态ip,在android中将静态IP设置为以太网
  19. 公众号运营要做什么?公众号运营规划方案分享
  20. SpringBoot整合华为云OBS实现文件上传下载

热门文章

  1. NioEventLoop 的实例化过程
  2. LockSupport
  3. SQLErrorCodeSQLExceptionTranslator
  4. Spring IoC容器:BeanFactory和ApplicationContext谁才是Spring IoC容器
  5. 搭建项目前端页面环境
  6. JDK7的六个新特性回顾和讲解
  7. 动态代理的概述和实现
  8. 字节输入流一次读取一个字节的原理
  9. 将微服务注册到Eureka Server上
  10. SpringBoot高级-缓存-RedisTemplate序列化机制