ArrayList与LinkedList的区别
ArrayList和LinkedList是常用的两种存储结构,他们之间有什么样的区别呢?
- ArrayList是一个动态数组的数据结构,LinkedList是链表的数据结构,他们都是实现了List接口。
- 当对List频繁进行查找时,ArrayList的效率会比LinkedList高,因为链表的查找必须通过头指针从前往后依次查找。
- 当对数据进行增加和删除的操作时,LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,如果数组的长度足够,不需要扩容,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动,如果数组长度不够需要扩容时,就要将原有的数组拷贝到一个新的内存空间然后进行操作。链表只需要更改所需要添加节点的前后的前驱后继的指针指向,所以效率更高。
- 从利用效率来看,ArrayList自由性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用;而LinkedList自由性较高,能够动态的随数据量的变化而变化,但是它不便于使用。
- ArrayList的若不输入长度,系统默认生成一个长16的Array,当需要扩容时,需要先申请更大的内存位置,然后将原有的Array拷贝到新申请的内存。LInkedList对内存的消耗在于存储结点信息以及结点指针信息。