ArrayList、LinkedList和vector

ArrayList实现类

ArrayList 底层数据结构就是数组,随机查询速度快、增删慢,线程不安全的,效率高,允许存放重复元素。
继承于 AbstractList 抽象类,实现了 List 接口
RandomAccess 接口,提供了随机访问支持。遍历元素的方法有快速随机访问和通过迭代器 Iterator 访问
Clonable 接口,可以被克隆 clone()
Serializable 接口,支持序列化
ArrayList 不是线程安全的,所以在无需考虑线程安全时使用,在需要考虑线程安全的多线程环境下可以考虑使用
Vector 或者 juc 包中的 CopyOnWriteArrayList

常量定义
private static final int DEFAULT_CAPACITY = 10;
//默认数组元素的初始化容积 
private static final Object[] EMPTY_ELEMENTDATA = {}; 
//没有元素的空对象数组,没有存储任何元素,数组长度为 0
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; 
//构建 ArrayList 时默认使用的空数组
属性

transient Object[] elementData; 就是用于存放元素的数组
private int size;真实存放的元素个数

构造器 List list=new ArrayList();

默认构造器 ArrayList(); 实际上并没有直接开辟空间,而是使用常量空数组。

  • ArrayList 实际上是通过数组保存数据,当构建 ArrayList 时,如果使用默认构造器,默认容积是 10,但是采用延
    迟构建。
  • 当 ArrayList 容积不足以存放元素时,会自动进行 50%增容处理。新容积=原始容积*3/2。
  • ArrayList 克隆函数是将全局元素克隆到一个数组中。elementData 前面有 transient 修饰。
  • ArrayList 实现序列化时,先写出容积,再依次写出每个元素。

linkedList实现类

LinkedList 底层数据结构是双向链表,查询慢、增删快,线程不安全的,效率高,允许存放重复元素。可以添加 null 值元素,允许元素重复,可以通过索引编号有序。
因为底层采用的是链表结构,所以没有容器的概念,从理论上来说可以无限制添加元素;但是 int size 限制了其中最大的元素个数为 Integer.max_value。

  • size 元素个数
  • first 和 last 是头节点和尾节点
  • Node 节点定义
  • item 就是具体存储的数据
  • next 用于指向下一个节点的引用
  • prev 用于指向前一个节点的引用

vector实现类

Vector 底层数据结构是数组,随机查询速度快、增删慢,线程安全,效率低,允许存放重复元素
数组,一般不使用,如果在多线程并发访问并求线程安全是可以考虑使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值