Java基础面试题之ArrayList和LinkedList有什么区别?

Java基础面试题之ArrayList和LinkedList有什么区别?

ArrayList和LinkedList都是List集合的一部分。两者在底层构造上面有着很大的不同。
首先ArrayList的底层构造是数组,其读取速度快,通过其下标就可以访问其数值,在存储方面上它内存连续,可以轻松的看到在内存中占用的大小,但并不能看到实际存储大小,不易扩展,删改速度慢。默认ArrayList的初始长度是10,当数组的长度不够存储数据时,其底层就会调用grow方法去创建一个原先长度1.5的新数组将之前的数据存储到新数组中。在插入数据和删除数据的过程中由于其底层构造是连续的内存单元,删除某一数据或插入某一数据之后的数据需要向前移动,大大降低了增删的效率。
其次LinkedList 的底层实现是链表,其优点是增删快,由于其在内存中的存储不是连续的,上一个数据的指针指向其下一个数据的结点,因此其查询效率低,并不容易看到在内存中占用的大小,但它易扩展,只需在需要扩展的位置找到其上一个结点将上一个结点的指针指向需要扩展的结点,将扩展结点的指针指向插入位置的结点即可完成插入的操作,删除同理。因此其增删的效率远远高于ArrayList。

你可能感兴趣的:(java,链表,数据结构,面试)