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倍

  • 相关阅读:
    24.Azkaban调度脚本的编写
    Docker 安装 Apache
    Docker 安装 MongoDB
    Docker 安装 Redis
    Docker 安装 Python
    Docker 安装 Tomcat
    Docker 安装 MySQL
    Docker 安装 PHP
    Docker 安装 Nginx
    Docker 镜像使用
  • 原文地址:https://www.cnblogs.com/oxygenG/p/10614419.html
Copyright © 2011-2022 走看看