Java 之 List<E> 与 ArrayList<E> 的区别

本文深入解析了Java中List接口与ArrayList实现类的区别,阐述了如何正确使用List接口提高代码的扩展性和灵活性,避免直接实例化具体实现类带来的局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:

https://www.cnblogs.com/zcscnn/p/7743507.html

https://www.cnblogs.com/aisiteru/articles/1151874.html 

interface List<E> extends Collection<E>

class ArrayList<E> extends AbstractList<E> implements List<E>

List是接口,ArrayList是类。ArrayList是List接口的一个实现类。

因此,List接口不能被构造,也就是我们说的不能创建实例对象,但是我们可以像下面那样为List接口创建一个指

向自己的对象引用,而ArrayList实现类的实例对象就在这充当了这个指向List接口的对象引用。

List list = new List();//会报错

List list = new ArrayList();//这句创建了一个ArrayList实现类的对象后把它上溯到了List接口。此时它是一个List对象。 

ArrayList arrayList = new ArrayList();//这句创建了ArrayList对象

上面的list拥有List的所有属性和方法,但不会拥有其实现类ArrayList的独有的属性和方法。 而arrayList则保留了ArrayList的所有属性和方法,ArrayList继承了List的属性与方法。 

arrayList.trimToSize();//trimToSize方法是ArrayList独有的方法
list.trimToSize();//会报错

 

为什么要用List list = new ArrayList()而不用ArrayList alist = new ArrayList() ?

正因为List是接口,所以它的扩展性是良好的。

List有多个实现类,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类,如 LinkedList或者Vector等等,这时你只要改变这一行就行了: List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。 

假设你开始用 ArrayList alist = new ArrayList(), 这下你有的改了,特别是如果你使用了 ArrayList特有的方法和属性。

如果开发的时候觉得ArrayList,HashMap的性能不能满足你的需要,可以通过实现List,Map(或者Collection)来定制你的自定义类.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值