zoukankan      html  css  js  c++  java
  • ArrayList源码分析

    简介

    ArrayList底层是数组实现的,可以自增扩容的数组,此外它是非线程安全的,一般多用于单线程环境下(Vector是线程安全的,所以ArrayList 性能相对Vector 会好些)

    ArrayList继承了AbstractList,实现了List接口

      1. 实现了Serializable接口,因此它支持序列化,能够通过序列化传输(实际上java类库中的大部分类都是实现了这个接口的)

      2. 实现了RandomAccess接口,支持快速随机访问(只是个标注接口,没有实际的方法),这里主要表现为可以通过数组下标直接访问

      3. 实现了Cloneable接口,能被克隆

    初始化

    transient Object[] elementData; //存储数组元素的缓冲区

    private static final Object[] EMPTY_ELEMENTDATA = {}; //空数组元素

    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; //默认空数组元素

    private static final int DEFAULT_CAPACITY = 10; //默认初始化容量

    private int size; //数组的大小

    protected transient int modCount = 0; //记录被修改的次数

    private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;//数组的最大值

    构造方法

    1. public ArrayList()

    2. public ArrayList(Collection<? extends E> c)

    3. public ArrayList(int initialCapacity);

    无参的构造方法

    带参数的构造方法1

    带参数的构造方法2

    从源码里可以看出:首先对传进来的初始化参数initialCapacity进行判断:

      如果initialCapacity参数大于0,elementData初始化为一个容量为initialCapacity的数组;如果参数等于0,则将elementData指向了EMPTY_ELEMENTDATA

     方法介绍

    add方法

    总结

     ArrayList 内部实现为一个对象数组存放具体的值,用一种扩容的机制,进行数组的动态增长扩容机制。元素的个数大于其容量,则把其容量扩展为原来容量的1.5倍

  • 相关阅读:
    GDB调试共享库的问题
    Android 2.3 StageFright如何选定OMX组件的?
    Perforce client p4常见用法
    pthread_cond_signal只能唤醒已经处于pthread_cond_wait的线程
    正则表达式验证数据例子
    美国经济数据公布时间
    .net去除html标签代码
    js Array 方法|js Array 方法使用
    在分析向此请求提供服务所需资源时出错。请检查下列特定分析错误详细信息并适当地修改源文件
    日期格式正则表达式
  • 原文地址:https://www.cnblogs.com/oxygenG/p/10614419.html
Copyright © 2011-2022 走看看