从源代码理解ArrayListLinkedList差别

ArrayList

从源代码来理解ArrayList和LinkedList差别

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

从源代码来理解ArrayList和LinkedList差别

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

从源代码来理解ArrayList和LinkedList差别

从源代码来理解ArrayList和LinkedList差别

从源代码来理解ArrayList和LinkedList差别

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

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

从源代码来理解ArrayList和LinkedList差别

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

从源代码来理解ArrayList和LinkedList差别

从源代码来理解ArrayList和LinkedList差别

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

从源代码来理解ArrayList和LinkedList差别

从源代码来理解ArrayList和LinkedList差别

假设找得到,则返回序号。否则返回-1

LinkedList

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

从源代码来理解ArrayList和LinkedList差别

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

从源代码来理解ArrayList和LinkedList差别

从源代码来理解ArrayList和LinkedList差别

从源代码来理解ArrayList和LinkedList差别

从源代码来理解ArrayList和LinkedList差别

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

从源代码来理解ArrayList和LinkedList差别

从源代码来理解ArrayList和LinkedList差别

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

从源代码来理解ArrayList和LinkedList差别

从源代码来理解ArrayList和LinkedList差别

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


从源代码来理解ArrayList和LinkedList差别

从源代码来理解ArrayList和LinkedList差别

链表查找元素的方法。

相关文章:

  • 2022-12-23
  • 2021-12-20
  • 2022-02-26
  • 2022-01-21
  • 2022-01-07
猜你喜欢
  • 2021-10-07
  • 2021-11-14
  • 2022-12-23
  • 2021-11-27
  • 2022-12-23
  • 2021-07-31
相关资源
相似解决方案