为什么查询出来的数据保存到Arraylist?插入删除数据为啥用LinkedList?

引言:这是我在回答集合体系时,被问到的一个问题,也是因为没有深入学习所以回答的并不是很好,所以这两天看了一下,以下是我的一些回答与学习方法。

学习方法:我们学习,系统性的学习肯定是比零散的学习更有效的,针对一个问题,要对它涵盖的内容都进行学习,而不是只针对问题本事,死记硬背,所以我也是从头学起,从最顶级的接口到实现类的源码。  

今天我主要讲是针对Arraylist以及LinkedList的区别进行回答,如果你想从头来一遍,这是我学习的文章。https://www.cnblogs.com/CarpenterLee/p/5545987.html。  

------ArrayList和LinkedList同属于List接口下的实现类。 

对于问题的回答,下面是我看完这几篇文章后自己的想法,看完后还是有点闷逼,但多多少少还是能回答一点。

问题1:为什么查询出来的数据保存到Arraylist?竟然你说它速度快,为什么快?   

答:  ArrayList它是使用数组的方式 实现的,数组有长度固定,下标识索引。正是因为这两个特性,促使我们保存数据的时候去使用它。查询出来的数据保存进去,这也就意味的两种操作,先放数据后拿数据,我们先说放数据,我们放入数据的时候,通常是通过add,在使用add方法的时候,它会找我们ArrarList里面最后一个数组的位置,然后将数据放进去,在这个过程中,我们不需要对元素进行移动,所以它所消耗的时间是非常少的,拿数据的时候,因为我们指定了get(index)方法的下标索引,通过索引我们就可以找到这个索引下对应的值,将其拿出,这个过程不会有其他时间的开销。相反,如果对数组中的数据进行指定位置插入或者删除,那么数组中的每个下标对应的值就要进行位置的移动,这浪费了一部分时间开销。

问题2:插入、删除数据为啥用LinkedList?

答:LinkedList是如通过双向链表实现的,如果你对单、双向链表还不了解,可以先去学习一下,这样你对插入、删除为啥用LinkedList就很清晰了。在双向链表中,每个元素它都有一个pre和next的指向,也就是指向它的上一个元素是什么,下一个元素是什么,并依次链接下去,在指定插入位置的时候,我们只需要去找这个元素插入的位置,它的上一个元素是什么,下一个元素是什么,加上自身元素总共有三个元素受到影响,修改它们的pre和next指向即可,不像数组,在中间插入一个元素,它后面所有的元素都会受到影响,删除同理。

 

以上全部是本小白对于这个问题的个人见解。

请大佬对我所描述的错误内容指出,感激不尽。

posted @ 2019-10-15 01:46  林果头发多  阅读(309)  评论(0编辑  收藏  举报