ArrayList和ArrayList有何不同?大家好,我是磊哥,一位经验丰富的程序员。今天我们来探讨一个常见的面试问题——ArrayList和ArrayList有何不同?
首先需要说明的是,ArrayList和LinkedList都是Java中list接口的实现类。我们可以在代码中找到这个接口,并看到其中有多个实现类,其中之一是ArrayList。这个类的中文意思是“数组列表”,它是一个数组,数组中的元素构成了一个列表。ICOL the list就是列表的意思,好,ok,它们的外观如何?
可以看下图,上面是一个数组,这些数组连在一起就形成了一个ArrayList。下面这个图中的节点通过指针连接在一起,形成了一个 ArrayList。这就是它们的外观。
它们有什么不同呢?它们的不同主要体现在以下三个方面。
·第一点是底层实现不同。ArrayList是基于动态数组实现的,而LinkedList是基于链表实现的。这是它们的不同之处。
·第二点是随机访问的性能不同。 ArrayList从下标为零开始,下标为一,下标为二。当访问下标为二的元素时,可以直接取到下标为三的元素,因此它的时间复杂度是L1。而ArrayLiL则不同。它在进行随机访问时只能从根节点开始,因此时间复杂度为O(n)。因此,在随机访问方面,ArrayLiL的性能不如ArrayList。
·第三点不同是它们的插入和删除性能不同。由于ArrayLiL是动态数组,当删除下标为零的元素时,后面的元素需要向前移动,因为老大不在了,老二代替老大的位置,老三代替老二的位置,后面所有的元素都需要向前移动。因此,除了添加和删除的性能之外,插入和删除的性能也一样。
如果添加元素时添加到了第一个位置,那么其他位置的元素也需要向后移动,原来的第一个位置也需要向后移动。因此,对于添加和删除操作,ArrayLiL的性能也不如ArrayList。
released的速度相对较慢,但对于linkthelist来说则不是如此。如果要删除头结点,只需将其删除即可。这样,后面的所有节点都不会受到影响,因为它们的位置和指针都不会发生变化,只是头节点不见了而已。如果第二个节点不见了,也只需要将其删除,然后将第一个节点的下一个指针指向原来的第三个位置即可。这样做的过程中,只需要修改一个位置。
而对于released来说,则需要将后面的所有元素都向前移动,因此在插入和删除操作上,lincolnlist的性能要优于released。这是它们三者之间的主要区别。可以将它们视为平分秋色的两种实现方式,一个是数组,一个是列表。在随机访问方面,connect更加高效。在删除和添加操作方面,connect和the list的性能都更好,因此两者可以打平。
这篇文章介绍了基本的语法和使用方法,读者可以通过添加方法来创建released,并通过at方法进行添加。当然,也可以使用泛型,以确保添加的元素只能是And。发布的使用方式与发布非常相似,也是一种泛型结构。
发型的定义方式仍然是通过某种方法进行添加的,最后进行打印。为什么?因为它们的方法非常相似,使用度达到了90%。它们都来自于list的基础行为,比如添加,就是通过at实现的。只是在发布和林肯发布下面有不同的实现方式。这就是它们两个技术的使用方式。
简单总结一下,对于发布和林肯发布来说,它们都是list下面的两个实线类,但有三点不同。底层的实线数据结构不同,随机访问的性能不同,以及插入和删除的性能不同。在随机访问较多、询问较多的场景下,可以选择使用发布。如果在添加和删除频率较高的场景下,可以选择使用林肯发布,今天的内容到此结束。记得一键私联,下期再见,拜拜。