从源码来理解ArrayList和LinkedList区别

从源码理解ArrayListLinkedList区别

ArrayList

ArrayList默认容量为10,实质是一个数组用于存放元素,size表示ArrayList所包含的元素个数。

ArrayList3个构造函数,第一个构造函数指定容量,第二个构造函数默认为一个空数组,第三个构造函数是从集合c转变为Arraylist的数组


add函数中,先确认数组容量够不够,一开始如果默认初始化(也就是调用第二个构造函数),添加元素时grow出来数组容量为10,构造了一个新的数组并且copy原来数组元素的值,然后element[0]赋值,第二次添加元素时因为elementData != EMPTY_ELEMENTDATA且

minCapacity - elementData.length <0所以直接element[1]赋值,并没有扩充容量,只有当满容量时才会扩容。

remove(int)函数,指移走序号为index的元素,numMoved指的是index后面元素个数,System.arraycopy后面的元素往前推一格,最后的元素置null,返回被删除的value

跟上面remove(int)的原理一样.


如果找得到,则返回序号,否则返回-1

LinkedList

LinkedList存放数据采用的是链表形式存放


first是指向首节点,last是指向尾结点



LinkedList有两个构造函数,第二个构造函数中将集合的元素传到链表上



都是采用链表插入数据的方法


都是采用链表删除元素的方法


链表查找元素的方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值