首页 > 其他 > 详细

arraylist源码

时间:2021-06-02 09:45:48      阅读:19      评论:0      收藏:0      [点我收藏+]

ArrayList集合

    public ArrayList() {
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }
 ?
    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
    private static final int DEFAULT_CAPACITY = 10;
 ?

默认初始化空数组,Object数组,默认初始化数组大小,是10。

 

我们使用arraylist不会使用默认构造函数,一般都会给一个比较靠谱的数据,100或者1000个大小,避免让他不断扩容的操作。

 

 

add(E e)方法

    public boolean add(E e) {
        ensureCapacityInternal(size + 1); // Increments modCount!!
        elementData[size++] = e;
        return true;
    }
 ?
 ?
 ?
 每增加一个 size就会++;
 elementData=["张三","李四","王五"];
 size=2;

 

set方法

     public E set(int index, E element) {
        rangeCheck(index);
 ?
        E oldValue = elementData(index);
        elementData[index] = element;
        return oldValue;
    }
     
    elementData[x]=ele;
     
     
  index,不能大于等于size   rangeCheck
  (E) elementData[index]; 读数组里的元素
 
  set(1,"赵六");
  判断 长度是否大于size,
  将index=1的数据读出来。
  给index位置的数据赋值给,传入的值。
  将之前读出来的value返回。
 

add(int index, E element) 方法

 add(int index, E element)
 ?
 index,不能大于等于size   rangeCheck
 size+1,确保数据不能满了。
 数组拷贝的api
    System.arraycopy(elementData, index, elementData, index + 1,
                          size - index);
                         
  add(1,"麻子");
  elementData=["张三","李四","王五"];
  index=1;
  size=3;
  System.arraycopy(elementData, 1, elementData,2,
                          2);
        elementData这个数组,从第一位开始(第二个元素)到数组(原来的)从第二位开始(第三个元素),到原来的向后挪一位。
                         

##get(int index)

  public E get(int index) {
        rangeCheck(index);//检查
        return elementData(index);//直接拿数据
    }

remove(int index)

    public E remove(int index) {
        rangeCheck(index);
 ?
        modCount++;
        E oldValue = elementData(index);
 ?
        int numMoved = size - index - 1;
        if (numMoved > 0)
            System.arraycopy(elementData, index+1, elementData, index,
                              numMoved);
        elementData[--size] = null; // clear to let GC do its work
 ?
        return oldValue;
    }
 ?
 检查,获取当前index的value,然后获取numMoved 也就是删除这个index后面需要向前挪数据的个数,
 然后就复制。
 将最后那位的数据给null。

 

add和addall这两个方法,数组需要扩容,数组长度固定,初始大小是10,需要扩容影响性能。

 

set,get定位到随机位置,性能很高。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

arraylist源码

原文:https://www.cnblogs.com/q1359720840/p/14839466.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!