Java学习笔记之ArrayList

ArrayList实现了List接口

1. 构造方法
public ArrayList() {
    this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
2. 私有变量DEFAULTCAPACITY_EMPTY_ELEMENTDATA
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

由此可见,ArrayList实际就是一个动态数组,那么ArrayList就有动态数组的所有特性。

3. add()

add方法主要实现了两个功能,一个是动态数组扩容size+1,一个是elementData[size++] = e;

4. remove()

remove方法,for循环遍历数组,找到要remove的数据,调用System.arraycopy方法,把需要删除的数据后面的所有数据向前挪动一个位置,并把数组中最后一个对象置为null(交给GC处理),size-1,并返回true,表示处理完毕,否则返回false。

 	public E remove(int index) {
 		//判断异常
        if (index >= size)
            throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
        modCount++;
        //获取旧数据
        E oldValue = (E) elementData[index];
		//需要挪动的位置
        int numMoved = size - index - 1;
        if (numMoved > 0)
        	//把index后面的所有数据向前挪动一个位置
            System.arraycopy(elementData, index+1, elementData, index,
                             numMoved);
        //最后一个数据设为null,并把size-1
        elementData[--size] = null; // clear to let GC do its work

        return oldValue;
    }
5. addAll()

addAll方法是把传过来的集合整体添加到当前集合的末尾(如指定位置,则是插入该位置,该位置原数据向后移动)

6. clear()
	for (int i = 0; i < size; i++)		    
		elementData[i] = null;
	size = 0;

所有数据置为null,并把size修改为0

7. clone()
ArrayList<?> v = (ArrayList<?>) super.clone();
v.elementData = Arrays.copyOf(elementData, size);
v.modCount = 0;
return v;

克隆当前ArrayList,之前有过这种需求,自己还是重新组合的,以后也可以调用Arrays.copyOf方法了

8. contains()、indexOf()

该方法中遍历整个数组,并调用equals方法来进行比较,如果有相等的,返回下标,如果没有相等的,返回-1

9. ensureCapacity()

增加容量到指定大小

10. get()

返回数组指定位置的对象

11. isEmpty()
public boolean isEmpty() {
    return size == 0;
}

如果数组的大小为0,返回true,其他情况都是false

12. iterator()
public Iterator<E> iterator() {
   return new Itr();
}

该方法返回了一个Iterator对象,

13. lastIndexOf()

从数组最后一个元素开始向前遍历,返回第一个出现的索引,如果没有返回-1

14. listIterator()
public ListIterator<E> listIterator() {
   return new ListItr(0);
}

返回对应ListItr对象,默认为0

15. retainAll()

删除指定集合外的所有数据,此方法的实现方法为:首先遍历整个数组,把包含的数组放在前面,每次放置记录次数w,并在最后把w之后的所有数据置为null(GC),如果调整后数组长度没有变,则返回false,如果调整之后数组长度发生了改变,返回true。

16. set()

修改指定位置的对象,并返回修改前的对象

	public E set(int index, E element) {
        if (index >= size)
            throw new IndexOutOfBoundsException(outOfBoundsMsg(index));

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

返回指定范围的数据,并保持和原数据的关联性。调用此方法并不会影响原数据大小。

18. toArray()

把该集合转化为数组对象。

19. trimToSize()

如果size和elementData.length不同的时候,根据size调整elementData

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值