面试官:说一下ArrayList和LinkedList有什么区别 我:。。。。面试: 对了但是没全对

这是一个面试向的文章,主要描述我在面试某公司的一面的一个过程,印象深刻,故而写下这篇文章

面试官:说一下ArrayList和LinkedList有什么区别

我(心里):简单,学过数据结构的都知道有什么区别

我(滔滔不绝):

ArrayList和LinkedList都是Java语言中常用的集合类,它们的区别在于底层数据结构不同,因此它们在特定场景下的表现也会有所不同:

  1. 底层数据结构:ArrayList底层是数组,LinkedList底层是链表。因此,当需要随机访问集合中的元素时,ArrayList的性能更好;而当需要频繁进行插入和删除操作时,LinkedList的性能更好。

  2. 插入和删除操作:当需要插入或者删除某个元素时,ArrayList需要将该元素之后的所有元素向后移动一个位置,而LinkedList只需要修改前后元素的指针即可。

  3. 内存占用:ArrayList在初始化时需要指定大小,如果不够用需要进行扩容操作,而LinkedList不需要进行扩容操作。另外,由于LinkedList每个节点需要存储指向前后节点的指针,因此占用的内存更多。

面试官:看来你挺懂的吗?你刚刚说到,ArrayList遍历快,删除和增加慢,我想在这里问一下,为什么删除和添加会慢?

我(心里):小case

我(自信的回答):因为当尝试在数组的中间添加元素的时候,数组要将这个位置后面的所有的索引都要进行改变,过程如下,假设定义数组arr长度为10,当我向第5个位置添加元素的时候,就要执行arr[11]=arr[10]....,以此类推,最后arr[4]=value,这中间,移动了很多元素,删除也是同理。

面试官:如果是最后一个元素呢?

我:最后一个元素的话,就不会很话费效率了,因为不需要移动元素。

面试官:好,那你在什么场景下会对ArrayList进行按索引插入和删除吗?

我:emmm,一时间想不出来

面试官:你的理论方面还是可以的,但是很多场景要结合实际工作中来看,那就下一个问题吧。

。。。。。。。。。。。。。。。。。。。

 

你可能感兴趣的:(面试,java,面试,java,职场和发展)