一、ArrayList集合底层数据结构
1、ArrayList集合介绍
List接口的可调整大小的数组实现
2、数组结构介绍
增删慢:每次删除元素,都要更改数组长度、拷贝以及移动元素位置。
查询快:由于数组在内存中是一块连续空间,因此可以根据地址+索引的方式快速获取对应位置上的元素。
二、ArrayList继承关系
1、Serializable标记性接口
介绍:
类的序列化由实现java.io.Serializable接口的类启用。不实现此接口的类将不会使任何状态序列化或反序列化。可以序列化的类的所有子类都是可序列化的。序列化接口没有方法或字段,仅用于标识可串行化的语义。
序列化:将对象的数据写入到文件;
反序列化:将文件中对象的数据读取出来;
源码:
public interface Serializable{
}
2、Cloneable标记接口
介绍:
一个类实现Cloneable接口来指示Object.clone()方法,该方法对于该类的实例进行字段的复制是合法的。在不实现Cloneable接口的实例上调用对象的克隆方法会导致异常。
源码:
public interface Cloneable{
}
克隆的前提条件:
被克隆对象所在的类必须实现Cloneable接口;
必须重写clone方法;
浅克隆:
只克隆基本变量,对象变量只是共用地址,不克隆。
如:
深克隆:
对象变量的类需要实现浅克隆;
重写clone方法
如:
clone的基本使用:
list.clone();
3、RandomAccess标记接口(ArrayList实现,LinkList没有)
介绍:
标记接口由List实现使用,以表明它们支持快速随机访问。
此接口的主要目的是允许通用算法更改其行为,以便在应用于随机访问列表或顺序访问列表时提供良好的性能。
4、AbstractList抽象类
三、方法源码
1、toString方法优化(不是源码)
字符串拼接会产生大量的对象,占用内存,建议使用StringBuilder。
如:
2、clone()源码
调用父类方法
调用copyOf
内部调用System.arraycopy
四、ArrayList与LinkedList的区别