同Vector一样是一个基于数组上的链表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector好一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。 |
---|
一、ArrayList
参考链接:https://blog.csdn.net/jianyuerensheng/article/details/51192811?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3.pc_relevant_aa
1. 数据结构:
特点:
和数组的结构一样,但是增加了一些额外的方法。
ArrayList继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。
实现了所有List接口的操作,并ArrayList允许存储null值。除了同步,ArrayList基本等同于Vector。在Vector中几乎对所有的方法都进行了同步(synchronized修饰),但ArrayList仅对writeObject和readObject进行了同步,其它比如add(Object)、remove(int)等都没有同步。
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess,Cloneable,Serilizable{
}
逻辑关系图:实线代表继承,虚线代表实现接口:
AbstractList提供了List接口的默认实现(个别方法为抽象方法)。
List接口定义了列表必须实现的方法。
实现了RandomAccess接口:提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在ArrayList中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。
实现了Cloneable接口:可以调用Object.clone方法返回该对象的浅拷贝。
实现了 java.io.Serializable 接口:可以启用其序列化功能,能通过序列化去传输。未实现此接口的类将无法使其任何状态序列化或反序列化。序列化接口没有方法或字段,仅用于标识可序列化的语义。