ArrayLIst(JDK1.8)

一.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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值