java list接口方法_java List集合接口的坑
原标题: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集合接口的坑相关推荐
- java中result方法_java.sql.resultSet接口中有很多方法的实现
接口是很重要的面向对象方式,继承接口的类不用全部实现定义的接口,可以这么说,我定义了好多接口,某个类可以这么实现这个接口,到另一个类你又想那么实现接口,都是可以的. 或者定义完接口不想管他都可以,虽然 ...
- java支持接口吗_java – 支持专用接口方法
此支持允许接口的非抽象方法在它们之间共享代码.私有方法可以是静态的或实例的. 接口的私有方法可以是抽象的还是默认的? 我可以问一个例子,"私有静态接口方法"在代码方面是否有用? 解 ...
- java 子类必须实现_Java学习之接口的子类必须实现接口的全部方法吗?
接口的子类必须实现接口的全部方法吗? 接口的子类必须实现接口中全部的方法吗?答案:不是.原因如下: 如果子类是非抽象类,则必须实现接口中的所有方法: 如果子类是抽象类,则可以不实现接口中的所有方法,因 ...
- java xml接口实例_Java访问WebService接口方法 , 返回xml数据,能根据 下面的能给我写个实例吗?略急...
接口方法StringgetHolidayMsg(Stringkey,Stringflag,StringxmlMessage)参数说明keyXX提供给的key值,传入key值不正确不能正常提取数据,值为 ...
- java接口常用_java的常用接口
Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements). 所有实现Collection接口的类 ...
- java多态和泛型_Java面向对象(二) 接口、多态和泛型
一.接口 二.多态 多态是同一个行为具有多个不同表现形式或形态的能力. 2.1 类型转换 转换方式 隐式 向上转型 对于基本数据类型,存储容量低的可自动向存储容量高的类型转换 对于引用变量,子类可被转 ...
- java面向对象接口实现_Java面向对象之接口
接口(interface): 接口的地位等同于class,换句话说接口中的所有方法都是抽象方法.在声明接口中的方法时,可以使用abstract关键字,也可以不适用,通常情况下,都会省略掉abstrac ...
- java 接口重写_java如何实现接口中的重写
普通类implements接口 1.普通方法,抽象方法都得重写: 2.默认方法可重写,也可不重写. 抽象类implements接口 在线视频教程分享:java教学视频 由抽象类来实现接口,则不必重写接 ...
- java 内部类声明 抽象类_Java 抽象类、接口、内部类
抽象类 当编写一个类时,常常会为该类定义一些方法,这些方法用以描述该类的行为方式,那么这些方法都有具体的方法体.但在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确地知道这些子类如何实 ...
最新文章
- 万维网与HTTP协议
- 【论文导读】DLP-KDD2019|BST---使用Transformer进行序列推荐
- AngularJS中ui-router全攻略
- Docker配置国内加速镜像源
- 辨异 —— 有两人生日在同一天、只有两人生日在同一天
- CSDN《程序员》杂志创始人 蒋涛推荐《程序员求职第一书》
- 数据可视化大屏案例系列 1
- 前端三大主流框架如何去选择?
- 服务器上phpstudy搭建网站,如何使用PHPstudy在本地搭建一个网站(最新图文教程)...
- IE8 正式版官方下载链接
- JAVA多线程并发之线程实现,4种线程池,终止线程4种方式
- win10修复计算机摁什么,编辑告诉你win10修复失败且无法进入系统的详尽处理步骤...
- 掌握python字符串容器_Python字符串容器,python
- 数据预处理 - 类型转换(离散型)
- Linux中断——request_irq
- unity游戏开发之令人上瘾的6大手游设计’潜规则’
- springboot基于微信小程序的校园外卖系统毕业设计源码091024
- android eth0静态ip,在android中将静态IP设置为以太网
- 公众号运营要做什么?公众号运营规划方案分享
- SpringBoot整合华为云OBS实现文件上传下载