• java集合学习-ArraryList


    上图,画工差,大家随便看看。

    ArrayList

    1.ArrayList是什么?有什么特点

    (1)ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长。  

    (2)ArrayList不是线程安全的, ArrayList实现了Serializable接口,因此它支持序列化。

    (3)实现了RandomAccess接口,支持快速随机访问,实际上就是通过下标序号进行快速访问。

    (4)实现了Cloneable接口,能被克隆

    2.ArrayList实现源码

     2.1构造方法

      很明显ArrayList就是一个数组哈。

    //1-----------------------
    public ArrayList() {
            this(10);
            //调用ArrayList(10) 默认初始化一个大小为10的object数组。
        }
    
    //2-------------------------
    public ArrayList(int initialCapacity) {    
            if (initialCapacity < 0)
                throw new IllegalArgumentException("Illegal Capacity: "+
                                                   initialCapacity);
             //如果用户初始化大小小于0抛异常,否则新建一个用户初始值大小的object数组。                                      
            this.elementData = new Object[initialCapacity];
        } 
    
    //3--------------------------
    public ArrayList(Collection<? extends E> c) {
            elementData = c.toArray();
            size = elementData.length;
            // 当c.toArray返回的不是object类型的数组时,进行下面转化。
            if (elementData.getClass() != Object[].class)
                elementData = Arrays.copyOf(elementData, size, Object[].class);
        }

    2.2 看下add(E e)方法

    //1-----------------------
    public boolean add(E e) {
            ensureCapacityInternal(size + 1);  // 加入元素前检查数组的容量是否足够
            elementData[size++] = e;
            return true;
        }
    //2----------------------- 
    private void ensureCapacityInternal(int minCapacity) {
            modCount++;
            // 如果添加元素后大于当前数组的长度,则进行扩容
            if (minCapacity - elementData.length > 0)
                grow(minCapacity);
        } 
    //3-----------------------  
    private void grow(int minCapacity) {
            // overflow-conscious code
            int oldCapacity = elementData.length;
            //将数组的长度增加原来数组的一半。
            int newCapacity = oldCapacity + (oldCapacity >> 1);
            if (newCapacity - minCapacity < 0)
                newCapacity = minCapacity;
                //如果扩充一半后仍然不够,则 newCapacity = minCapacity;minCapacity实际元素的个数。
            if (newCapacity - MAX_ARRAY_SIZE > 0)
                newCapacity = hugeCapacity(minCapacity);
                //数组最大位2^32
            // minCapacity is usually close to size, so this is a win:
            elementData = Arrays.copyOf(elementData, newCapacity);
        }    

     

  • 相关阅读:
    第三方支付
    优化MySQL插入方法的五个妙招
    MySQL的数据类型和建库策略详解
    mysql 文本搜索
    mysql 存储过程
    mysql 游标的使用
    mysql 触发器
    mysql 保留点
    MySQL 使用硬链接配合truncate 删除2.2T的表
    25-ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/qtxx/p/9581328.html
Copyright © 2020-2023  润新知