欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ArrayLIst(JDK1.8)

程序员文章站 2022-06-04 19:23:46
...

一.ArrayList 实现的接口

 

extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable

ArrayList 是一个动态数组,能够自动扩容,在添加的时候首先判断是不是需要扩容

 private void ensureExplicitCapacity(int minCapacity) {//minCapacity=size+1
        modCount++;

        // overflow-conscious code
        if (minCapacity - elementData.length > 0)
            grow(minCapacity);//这就是扩容方法
    }


​​二.类属性

private static final int DEFAULT_CAPACITY = 10  默认容量
private static final Object[] EMPTY_ELEMENTDATA = {};空对象
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};默认空对象
Object[] elementData;对象数组,数据存储
int size;数组存放数据长度

三.方法

1.add()

 public boolean add(E e) {//添加数据到数组末尾
        ensureCapacityInternal(size + 1);  // Increments modCount!!
                    //判断是不是需要扩容,如果是就自动扩容
        elementData[size++] = e;
        return true;
    }

2.add(O,index)

public void add(int index, E element) {//添加到指定位置
        rangeCheckForAdd(index);

        ensureCapacityInternal(size + 1);  // Increments modCount!!
        System.arraycopy(elementData, index, elementData, index + 1,
                         size - index);//直接用arraycopy复制
        elementData[index] = element;
        size++;
    }

3.set(int index, E element) 

返回值为修改前的数据

public E set(int index, E element) {
        rangeCheck(index);

        E oldValue = elementData(index);
        elementData[index] = element;
        return oldValue;
    }

4. 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
        //size-1

        return oldValue;
    }
5.clear()
  for循环置空,效率很慢

6.contains/indexOf

全都是用for遍历数组,很慢,尽量少用

public int indexOf(Object o) {
    if (o == null) {
        for (int i = 0; i < size; i++)
            if (elementData[i]==null)
                return i;
    } else {
        for (int i = 0; i < size; i++)
            if (o.equals(elementData[i]))
                return i;
    }
    return -1;
}