java src 阅读

Posted on 2015-02-07 10:18  Dr.函兽 



java源码阅读

Version:jdk1.7.0_51


DIR

ArrayList


ArrayList

public class ArrayList<E> extends AbstractList<E> 
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
    private static final long serialVersionUID = 8683452581122892189L;
  • RandomAccess:
  • import:java.util.RandomAccess
  • 标志接口,用来表明其支持快速(通常是固定时间)随机访问。此接口的主要目的是允许一般的算法更改其行为,从而在将其应用到随机或连续访问列表时能提供良好的性能。
  • Cloneable:
  • import:java.lang.Cloneable
  • 标志接口,此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常。
  • Serializable:
  • import:java.io.Serializable
  • 标志接口,通过实现接口以启用其序列化功能。
private static final int DEFAULT_CAPACITY = 10;
private static final Object[] EMPTY_ELEMENTDATA = {};
private transient Object[] elementData;
private int size;
  • 默认容量(初始长度):10
  • 通过Object数组elementData存储数据
  • size存储元素数量
public ArrayList(int initialCapacity) {
   super();
   if (initialCapacity < 0)
   throw new IllegalArgumentException("Illegal Capacity: " + initialCapacity);
   this.elementData = new Object[initialCapacity];
}
    
public ArrayList() {
    super();
    this.elementData = EMPTY_ELEMENTDATA;
}

public ArrayList(Collection<? extends E> c) {
    elementData = c.toArray();
    size = elementData.length;
    // c.toArray might (incorrectly) not return Object[] (see 6260652)
    if (elementData.getClass() != Object[].class)
        elementData = Arrays.copyOf(elementData, size, Object[].class);
}
  • ArrayList提供了三种构造方法
  • ArrayList(Collection< ? extends E > c)方法支持超类的参数类型