相信很多面试者经常被问到JAVA中ArrayList和LinkedList的区别这个问题,回答也都是教科书式的回答,有的是死记硬背背下来的,有的是理解而回答出来的,无非就是如下的答案:
1、ArrayList是基于数组的,LinkedList是基于链表的
2、ArrayList查询更高效,插入删除比ArrayList慢,LinkedList查询效率没有ArrayList高,但是插入删除很快。
说的多一点的会就ArrayList和LinkedList的查询和插入删除的算法时间复杂度给予一个具体的值。
其实LinkedList比ArrayList实现起来复杂了很多,ArrayList就是纯数组的实现,而LinkedList使用到了链表数据结构以外,还实现了一个双端队列的数据结构。对于双端队列,不同于栈和队列的是,它可以从两个端同时对数据进行入和出,有的说是可以看作栈和队列的结合,支持栈的先进后出和队列的先进先出,但是这里面跟传统的栈这个数据结构还是不同的,主要还是队列的特性,而且不是那种包证顺序操作的特性,比栈和队列操作上更加灵活。
但是实际的开发中会根据ArrayList和LinkedList做很详细的分析,并且做出用哪一个的决定吗?貌似做JAVA的很少从底层数据结构上去考虑性能问题,实际业务中遇到慢的情况可能会去尝试改变一下选择哪一个,要么是从架构上去做技术实现选择了。