Java--ArrayList源码解读
来源:互联网 发布:网站流量统计工具 知乎 编辑:程序博客网 时间:2024/05/16 04:01
ArrayList 源码解读
ArrayList 的size、isEmpty、get、set、iterator 和 listIterator 操作都以固定时间运行。add 操作以分摊的固定时间 运行,也就是说,添加 n 个元素需要 O(n) 时间。其是不同步的。
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
继承AbstractList类,实现List,RandomAccess,Cloneable,Serializable接口。
public ArrayList() {<h4>this(10);</h4> }默认的初始容量为10。
<span style="font-style: normal;"> public void ensureCapacity(int minCapacity) {modCount++;int oldCapacity = elementData.length;if (minCapacity > oldCapacity) { Object oldData[] = elementData; int newCapacity = (oldCapacity * 3)/2 + 1; if (newCapacity < minCapacity)newCapacity = minCapacity; // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity);} }</span>
ensureCapacity 方法来确认容量应扩为多少。
public E get(int index) {RangeCheck(index);return (E) elementData[index]; }
get方法,RangeCheck()方法检查索引是否合法。
public E set(int index, E element) {RangeCheck(index);E oldValue = (E) elementData[index];elementData[index] = element;return oldValue; }
set方法,返回旧值。
public void add(int index, E element) {if (index > size || index < 0) throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size);ensureCapacity(size+1); // Increments modCount!!System.arraycopy(elementData, index, elementData, index + 1, size - index);elementData[index] = element;size++; }
add方法,当插入数组中的位置时,需要将其后面的数值依次后移。
public E remove(int index) {RangeCheck(index);modCount++;E oldValue = (E) elementData[index];int numMoved = size - index - 1;if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved);elementData[--size] = null; // Let gc do its workreturn oldValue; }
与add()方法类似,将后面的值依次前移一位,并返回删除的值。
<span style="font-style: normal;"> public void ensureCapacity(int minCapacity) {modCount++;int oldCapacity = elementData.length;if (minCapacity > oldCapacity) { Object oldData[] = elementData; int newCapacity = (oldCapacity * 3)/2 + 1; if (newCapacity < minCapacity)newCapacity = minCapacity; // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity);} }</span>
ensureCapacity 方法来确认容量应扩为多少。
public E get(int index) {RangeCheck(index);return (E) elementData[index]; }get方法,RangeCheck()方法检查索引是否合法。
public E set(int index, E element) {RangeCheck(index);E oldValue = (E) elementData[index];elementData[index] = element;return oldValue; }set方法,返回旧值。
public void add(int index, E element) {if (index > size || index < 0) throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size);ensureCapacity(size+1); // Increments modCount!!System.arraycopy(elementData, index, elementData, index + 1, size - index);elementData[index] = element;size++; }
add方法,当插入数组中的位置时,需要将其后面的数值依次后移。
public E remove(int index) {RangeCheck(index);modCount++;E oldValue = (E) elementData[index];int numMoved = size - index - 1;if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved);elementData[--size] = null; // Let gc do its workreturn oldValue; }
0 0
- Java--ArrayList源码解读
- Java源码解读-ArrayList
- Java 2源码解读:java.util.ArrayList
- Java 2源码解读:java.util.ArrayList
- Java 2源码解读:java.util.ArrayList
- Java 2源码解读:java.util.ArrayList
- Java 2源码解读:java.util.ArrayList
- Java源码解读之java.util.ArrayList
- Java源码解读之util.ArrayList
- Java源码解读之util.ArrayList
- Java源码解读之util.ArrayList
- Java源码解读之util.ArrayList .
- Java集合框架源码解读(1)ArrayList
- Java源码解读——ArrayList
- Java集合—ArrayList的源码解读
- java源码解读之ArrayList------jdk 1.7
- ArrayList源码解读
- ArrayList源码解读
- Linux内核网络部分---IP数据报文分片重组
- Android include的使用,id一样怎么监听点击事件
- 扫描网段找出树莓派IP
- WinForm容器内控件批量效验是否允许为空?设置是否只读?设置是否可用等方法分享
- 排号机java
- Java--ArrayList源码解读
- MIPS汇编指令集
- html 标签详解(基础<html> <title>)
- ssh免密码登陆
- 图的存储与遍历
- Radial Sets系列文章
- Device Tree(二):基本概念
- 卢卡斯莱默检验法检验梅森素数
- Struts2之OGNL