title: Java-List-ArrayList的扩容机制
date: 2021-09-22 14:45:06
tags: Java
categories:
- Java
toc: true # 是否启用内容索引
ArrayList简介
继承AbstractList,ArrayList继承了AbstractList的功能和其抽象含义。
实现了List,RaddomAccess,Cloneable,Serializable
表示实现了集合,随机快速访问,克隆,序列化的功能和其抽象含义
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable{
}
RandomAccess标识接口,表示实现类实现的List接口集合支持快速访问的。通过元素访问快速获取元素对象
实现了Cloneable接口,覆盖了函数的clone(),表示能被克隆,但只是浅克隆
Serializable接口意味着ArrayList支持序列化,能通过序列化去传输
List接口下的主要实现类
与Vector不同的是Vector实现类线程安全,它是古老的List实现类,效率没有ArrayList高
ArrayList线程不安全
与LinkedList的区别
1.都是线程不安全的
2.底层集合的数据结构不同,ArrayList底层是数组,而LinkedList底层是双向链表(JDK1.6之前是循环列表,JDK1.7以后是循环列表)
3.插入和删除是否受元素位置的影响:ArrayList采用数组存储,所以插入和删除元素的时间复杂度受位置的影响,因为是顺序关系.
而LinkedList则不同它的增删在任意位置下都为o(1)
所以ArrayList的增删慢,而LinkedList的增删快
4.LinkedList不支持高效的随机元素访问,而ArrayList支持。
5.内存占用,ArrayList会在结尾预留一定内容的容量空间,而LinkedList的空间花费在它的每一个元素都要消耗ArrayList更多的空间