目录
一、List AbstractList ArrayList LinkedList的作用?
一、List AbstractList ArrayList LinkedList的作用?
1.类型不同
- List 是一个接口
- AbstractList 是一个抽象类
- ArrayList 普通类
- LinkedList 普通类
2.关系
虚线是实现,实线是继承关系
3.接口和抽象类的区别
图片来源
https://img.php.cn/upload/article/000/000/024/ae506a9600e807eef16f043273de08fe-0.png
4.分析
- 首先接口它是规定要有哪些功能,并不会做具体的实现,由此可知List接口的作用规定了它可以做哪些操作
- 抽象类就好比一个通用的工具类,它里面有一些共通的方法,如果想用直接继承它就好了,由此可知AbstractList实现了List接口,针对于List接口做实现,抽象类实现接口的时候,无需实现接口中全部的方法,而这些未实现的方法由继承自此抽象类的子类来实现,有了抽象类这一层,可以减少子类不必要的实现,并且扩展了额外的功能。
- ArrayList和LinkedList是对List接口的不同实现,由于接口和抽象类不能直接实例化,所以在使用的时候用它的子类
二、ArrayList 构造有几种,有参数构造的意义?
1.构造参数
通过查看源码得知ArrayList的构造一共有三个,一个无参构造两个有参构造。
2.无参构造直接创建一个空的对象数组
作用:无参构造的作用主要是用于创建一些无法确定集合大小的场景。
2.有参构造参数是一个int类型的时候。
根据源码可知当传入的值大于1,它会根据这个值创建一个固定长度的对象数组,当值等于0,等同于无参构造,创建一个空的对象数组,当小于0的时候会报IllegalArgumentException异常。
传入小于0的时候报错
作用:int类型参数的构造器主要用于已经确定集合大小的场景
3.有参构造参数是一个集合类型的时候。
根据源码分析,前提传入的集合如果是空,会报NullPointerException异常,不为空传入后他会将其转换为对象数组,然后会把对象数组的长度付给size,如果这个size等于0创建一个空的对象数组,如果大于0在判断传入进来的集合类型是否是ArrayList如果是直接赋值,不是会把传入的集合复制一份在进行赋值。
作用:用于复制集合数据并不改变原有集合数据
知识点
- 接口抽象类区别
- List体系部分继承关系
- ArrayList和LinkedList的基础使用
- ArrayList底层数组结构 LinkedList底层链表结构
- ArrayList各个构造的作用