如何简单理解表 、ArrayList和LinkedList 他们又有什么区别
本篇文章呢,是想针对于表这方面,把自己总结出来的知识写出来,我会尽量把他写的易于理解,毕竟理解才是掌握知识的最重要的一步,如果文章有什么漏洞,希望各位大牛指点,也更希望像我一样的小白甚至是刚接触代码的萌新看完后都能有些收获
表
什么是表,我特地从一些数据结构的书中找到了下面一句话
具有一对一关系的数据所组成的数据结构
也就是说,我们完全可以把表具象化,就是一张纸上有一堆划分好的格子,每两个相邻的格子都有对应的关系。你完全可以把它先想象成Excel表格。
我们很容易想到,表的存在是为了把杂乱无关的数据通过一种方式进行一种组合,这样便更容易进行数据的操作,那么,我们又应该用什么样的方式去实现表呢?
什么是ArrayList和LinkedList,他们的区别
ArrayList和LinkedList其实无非就是表的两种实现方式,Array是数组,Linked是链表,这样翻译过来的话大家就能直观的看出他们的意义。(“掌握一门外语是多么的重要” -------这话我鲁迅也不记得说没说了)
那既然知道了什么是ArrayList和LinkedList,那他们之间到底有什么样的区别呢?我们先看一下数组的结构
这就是大家接触过的数组,里面存放1,2,3,4,5,当我们对数组进行一系列操作的时候,会发现数组的几个问题。
1.现在我想查询其中的一个值,应该怎么做?
很简单,遍历一遍数组,返回第一次找到该值的位置。因为数组的内存是连续分布的,速度也会很快,这个无可厚非
2.现在我想插入或者删除一个值,应该怎么做?
这下我们遇到了问题,
第一就是扩容问题,现在数据在数组中已经是满的了,想要插入就会报错,因为数组的长度一般都是提前固定的,不过幸运的是,程序中遇到这种情况,程序会自动给数组扩容,长度会变成起始数组长的二倍,不过这需要消耗一定时间。
第二,即使现在扩容了,除非插入的位置是最后的节点,不然没办法直接插入
现在数组长度仍有余,6想插入到数组第三个位置,可是第三个位置已经有值了,如果想把6插入到第三个位置的话,需要把3,4,5都依次往后依次移动一个位置,然后把6插入进去,数据少的时候或许问题不大,但是假设数组中现在又100万亿个数据(夸张点),你想在第三个位置插入元素需要把后面的数据依次都往后移动,这可是一个大工程,可以称作继三峡大坝之后的有一创举。删除也是同理。
先把这个问题放在一边,我们来看看链表。
1.现在要进行 查询操作,应该怎么做?
因为是链表,内存分布并不连续,查询的时候需要从第一个元素通过next查找下面的元素,所以查询过程可能会慢。
2.现在进行插入和删除,应该怎么做?
这里我们把第一个数据的next指向新插入的数据,然后新插入的数据再指向原本的第二个数据,我们的插入就算完成了,这样的错做并不多么复杂,删除也是同理。
如上两种,大家也就明白ArrayList和LinkedList两者的区别了
总结
ArrayList和LinkedList只不过是表的两种实现方式,只不过一个底层是数组,一个底层是链表,数组的实现优点是查询快,但是插入删除慢,链表的优点是插入删除慢,查询快。所以我们在做项目的时候,要根据所实现的业务的需求来决定到底使用哪钟表,这样才能最大限度的优化我们的方案
当然,他们两个的知识点还有很多,比如ArrayList类和LinkedList类和List接口的关系,ArrayList和LinkedList实现操作过程中的时间复杂度,其中都有什么样方法,以及如何用代码实现ArrayList和LinkedList,日后我会深入总结一下
那么 今天的分享到此结束啦,如果有什么 疑问的话,欢迎在下面留言哦,也请各位大牛多多指教,在下有礼啦