ArrayList源码解析
来源:互联网 发布:十大必看电影 知乎 编辑:程序博客网 时间:2024/05/16 12:11
ArrayList作为java集合框架里最基础的一环,它的底层是一个简单的数组
先给出它的类图
首先是构造方法和成员变量
private static final long serialVersionUID = 8683452581122892189L; private transient Object[] elementData; private int size; public ArrayList(int paramInt) { if (paramInt < 0) { throw new IllegalArgumentException("Illegal Capacity: " + paramInt); } this.elementData = new Object[paramInt]; } public ArrayList() { this(10); } public ArrayList(Collection<? extends E> paramCollection) { this.elementData = paramCollection.toArray(); this.size = this.elementData.length; if (this.elementData.getClass() != [Ljava.lang.Object.class) { this.elementData = Arrays.copyOf(this.elementData, this.size, [Ljava.lang.Object.class); } }可以看到无参构造,可以看到默认的底层数组大小为10
接下来看看最常用的add方法
public boolean add(E paramE) { ensureCapacity(this.size + 1); this.elementData[(this.size++)] = paramE; return true; }有一段
ensureCapacity(this.size + 1);想一想当我们的list长度大于10时,此时size为10
public void ensureCapacity(int paramInt) { this.modCount += 1; int i = this.elementData.length; if (paramInt > i) { Object[] arrayOfObject = this.elementData; int j = i * 3 / 2 + 1; if (j < paramInt) { j = paramInt; } this.elementData = Arrays.copyOf(this.elementData, j); } }这一段是用来扩容的,这也是为什么ArrayList被称为动态数组的原因
这是get方法
public E get(int paramInt) { RangeCheck(paramInt); return this.elementData[paramInt]; }
通过对ArrayList源码的解析
我们可以得出ArrayList的特点
1.有序(元素放入的先后顺序)
2.可重复
3.查找效率高
阅读全文
0 0
- ArrayList 源码解析
- ArrayList源码解析
- android源码解析 -- ArrayList
- ArrayList源码解析
- ArrayList源码解析
- ArrayList源码解析
- ArrayList源码解析
- ArrayList LinkedList源码解析
- ArrayList 源码解析
- ArrayList集合源码解析
- ArrayList源码解析
- ArrayList类源码解析
- ArrayList源码解析
- ArrayList源码解析
- ArrayList 部分源码解析
- ArrayList源码解析
- ArrayList源码解析
- ArrayList源码解析
- cmake
- 【入门】vert.x中eventBus实现通信的例子(前端js部分)
- C++中引用(&)的用法和应用实例
- 通过desktop.ini文件修改文件图标
- linux 查询系统处理器or版本号
- ArrayList源码解析
- mongodb数据库的启动和停止
- Mybatis的selectKey——xml映射和注解映射sql
- C++ vector简单使用
- 【设计】RESTful API的十个最佳实践
- 《招聘一个靠谱的iOS》面试题及参考答案(上)--转
- display:none与visible:hidden的区别
- FZU 1046 Tempter of the Bone
- Linux环境下Strom单机安装详解