image.png

1. ArrayList - 图4

image.png
image.png

同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. 数据结构:

1. ArrayList - 图7
特点:
和数组的结构一样,但是增加了一些额外的方法。

  1. 快速查找:通过元素索引实现;
  2. 容量动态增长。
  3. 适合随机查找和遍历,不适合插入和删除—-需要复制、移动,代价比较高。

    2. ArrayList继承关系

ArrayList继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。
实现了所有List接口的操作,并ArrayList允许存储null值。除了同步,ArrayList基本等同于Vector。在Vector中几乎对所有的方法都进行了同步(synchronized修饰),但ArrayList仅对writeObject和readObject进行了同步,其它比如add(Object)、remove(int)等都没有同步。

  1. public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess,Cloneable,Serilizable{
  2. }

逻辑关系图:实线代表继承,虚线代表实现接口:
1. ArrayList - 图8

  1. AbstractList提供了List接口的默认实现(个别方法为抽象方法)。
  2. List接口定义了列表必须实现的方法。
  3. 实现了RandomAccess接口:提供了随机访问功能。RandmoAccessjava中用来被List实现,为List提供快速访问功能的。在ArrayList中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。
  4. 实现了Cloneable接口:可以调用Object.clone方法返回该对象的浅拷贝。
  5. 实现了 java.io.Serializable 接口:可以启用其序列化功能,能通过序列化去传输。未实现此接口的类将无法使其任何状态序列化或反序列化。序列化接口没有方法或字段,仅用于标识可序列化的语义。

image.png

2. arraylist扩容

image.png

3. 删除

image.png

image.png