赞
踩
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;
真实存放的元素个数
默认构造器 ArrayList(); 实际上并没有直接开辟空间,而是使用常量空数组。
LinkedList 底层数据结构是双向链表,查询慢、增删快,线程不安全的,效率高,允许存放重复元素。可以添加 null 值元素,允许元素重复,可以通过索引编号有序。
因为底层采用的是链表结构,所以没有容器的概念,从理论上来说可以无限制添加元素;但是 int size 限制了其中最大的元素个数为 Integer.max_value。
Vector 底层数据结构是数组,随机查询速度快、增删慢,线程安全,效率低,允许存放重复元素
数组,一般不使用,如果在多线程并发访问并求线程安全是可以考虑使用
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。