ArrayList和LinkedList的比较

来源:互联网 发布:大数据情报分析 编辑:程序博客网 时间:2024/04/29 12:19

ArrayList和LinkedList都是List这个ADT下的实现,因此API差不多,但是具体操作有根据arraylist和linkedlist而区别很大.就我们知道的,arraylist是一个可变数组,而数组在获取元素时(get(index))很方便,效率也很高(用数据结构或者算法书上的书法,是线性增长的),而remove()和add()的操作的耗时则是n^2的效率,因为可变数组在对其内部结构做变更时,其他未变更的元素相也是要做对应的位置调整(前移或者后移),其实也是调整,所以开支很大但是linkedlist则是和arraylist想法,因为其内部结构是链表,所以在获取其中的元素时(get(index))需要一个一个往下查找,所以开支很大,而插入和删除操作则是改变前后两个位置的链表指向,所以效率很高。理论的说辞就到这里,下面直接贴代码:![这里写图片描述](http://img.blog.csdn.net/20170407222920943?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3V4dWh1YTEyM18wMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)这段代码就是比较在插入的时候可变数组和链表的执行效率的![这里写图片描述](http://img.blog.csdn.net/20170407223053614?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3V4dWh1YTEyM18wMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)这段就是二者的执行效率的最直接的比较,从这一段可以很直观的看出来linkedlist的在执行效率上的效率之高但是,也是有例外的,如果插入的位置是表的尾部,那么这个时候,arraylist和linkedlist的执行效率是与非尾部插入不一样的,原因是:尾部插入元素,可变数组需要移动的就是插入的这个元素而已,开支自然就少,如果将for循环中的循环次数由300000提升到3000000,那么就会发现这个时候arraylist 的效率就会优于linkedlist,原因是:可变数组依旧是变动插入的那一个元素,而链表的最后一个元素除了要链接上前一个元素,他还要往后链接一个null,所以此种场景下开支自然大于可变数组了,有心的朋友可以通过程序直观的体验一下。下一次在通过代码说明二者在get的时候区别吧

0 0