ArrayList和LinkedList的异同
一、ArrayList和LinkedList的相同点
ArrayList和LinkedList都是实现了List接口的容器类,用于存储一系列的对象引用,他们都可以对元素的增删改查进行操作。
ArrayList、LinkedList、Vector和Stack是List的四个实现类, List是一个接口,它继承与Collection接口,代表有序的队列。其中Vector是基于JDK1.0,虽然实现了同步,但是效率低,已经不用了,Stack继承与Vector。
二、ArrayList和LinkedList的区别
1、数据及内部结构
(1)ArrayList是基于(Array)动态数组的数据结构
ArrayList内部使用数组的形式实现了存储,实现了RandomAccess接口,利用数组的下面进行元素的访问。
(2)LinkedList是基于(Link)链表的结构
LinkedList内部使用双向链表的结构实现存储,LinkedList有一个内部类作为存放元素的单元,里面有三个属性,用来存放元素本身以及前后2个单元的引用,另外LinkedList内部还有一个header属性,用来标识起始位置,LinkedList的第一个单元和最后一个单元都会指向header,因此形成了一个双向的链表结构。
2、扩容问题
(1)ArrayList以数组复制的形式进行步长是0.5倍原容量的扩容
因为是数组,所以ArrayList在初始化的时候,有初始大小10,插入新元素的时候,会判断是否需要扩容,步长是0.5倍原容量扩容的步长是0.5倍原容