您当前的位置: 首页 >  ar

恐龙弟旺仔

暂无认证

  • 0浏览

    0关注

    282博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

JDK源码解析之ArrayList

恐龙弟旺仔 发布时间:2019-01-08 16:07:10 ,浏览量:0

前言:

    之前写了关于Mybatis、Spring、Tomcat的源码解析,现在准备开始写一下JDK的源码解析系列文章。

    网络上已经有很多大神级的JDK类解析文章,相比而言,无论是深度还是文笔都让笔者自惭形秽。

    但是为了让自己对JDK源码的印象更加深刻,所以还是准备献丑了。

    从自己的角度来描述一下对JDK相关类的理解,欢迎指正

 

    从网络上截一个图(如有侵权,请联系作者),简单表示下数组结构

    网格下面的0、1、2...表示index,也就是索引

    网格中的数据表示当前索引的值

 

1.ArrayList结构、参数分析
public class ArrayList extends AbstractList
        implements List, RandomAccess, Cloneable, java.io.Serializable
{   
    // 默认大小,为10
    private static final int DEFAULT_CAPACITY = 10;

    // 数据放置在elementData,这个数组中
    transient Object[] elementData; // non-private to simplify nested class access

    // 数组大小
    private int size;

   可以看出,ArrayList默认使用数组来存放数据

 

2.构造方法
// 空参构造
public ArrayList() {
    // private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
    this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}

// 给定初始容量
public ArrayList(int initialCapacity) {
    if (initialCapacity > 0) {
        this.elementData = new Object[initialCapacity];
    } else if (initialCapacity == 0) {
        this.elementData = EMPTY_ELEMENTDATA;
    } else {
        throw new IllegalArgumentException("Illegal Capacity: "+
                                           initialCapacity);
    }
}

// 给定初始集合
public ArrayList(Collection c) {
    ...
}

// 4.删除某个区间的元素
protected void removeRange(int fromIndex, int toIndex) {
    ...
}

// 5.按照条件删除
@Override
public boolean removeIf(Predicate            
关注
打赏
1655041699
查看更多评论
0.0496s