ITPub博客

首页 > 应用开发 > Java > ArrayList源码阅读笔记

ArrayList源码阅读笔记

原创 Java 作者:20170405 时间:2020-08-18 14:03:46 0 删除 编辑

  源码分析

  属性

  首先看看ArrayList的属性。

  /**

  * 默认初始化容量

  */

  private static final int DEFAULT_CAPACITY = 10;

  /**

  * 空数组,如果传入的容量为0时使用

  */

  private static final Object[] EMPTY_ELEMENTDATA = {};

  /**

  *空数组,传传入容量时使用,添加第一个元素的时候会重新初始为默认容量大小

  */

  private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

  /**

  *存储数据元素的数组

  */

  transient Object[] elementData; // non-private to simplify nested class access

  /**

  * ArrayList的大小(包含数据元素的个数)

  */

  private int size;

  构造方法

  无参构造方法

  /**

  * 创建一个初始容量为10的空列表

  */

  public ArrayList() {

  this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;

  }

  1234567

  指定初始容量的构造方法

  /**

  * 创建一个指定容量的list

  */

  public ArrayList(int initialCapacity) {

  // 如果传入的初始容量大于0,就新建一个数组存储元素

  if (initialCapacity > 0) {

  this.elementData = new Object[initialCapacity];

  } else if (initialCapacity == 0) {

  // 如果传入的初始容量等于0,使用空数组EMPTY_ELEMENTDATA

  this.elementData = EMPTY_ELEMENTDATA;

  } else {

  throw new IllegalArgumentException("Illegal Capacity: "+

  initialCapacity);

  }

  }

  从其它集合构造

  /**

  * 把传入集合的元素初始化到ArrayL ist中    m/

  */

  public ArrayList(Collection c) {

  //把集合转为数组

  elementData = c.toArray();

  if ((size = elementData.length) != 0) {

  // 检查c.toArray()返回的是不是Object[]类型,如果不是,重新拷贝成Object[].class类型

  if (elementData.getClass() != Object[].class)

  elementData = Arrays.copyOf(elementData, size, Object[].class);

  } else {

  // 如果是空集合,则初始化为空数组EMPTY_ELEMENTDATA

  this.elementData = EMPTY_ELEMENTDATA;

  }

  }


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69979119/viewspace-2712553/,如需转载,请注明出处,否则将追究法律责任。

下一篇: i = ++i
请登录后发表评论 登录
全部评论

注册时间:2020-07-14

  • 博文量
    63
  • 访问量
    27681