专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java中list的使用之List的应用场景

Java中list的使用之List的应用场景

更新时间:2020-07-15 16:43:29 来源:动力节点 浏览2273次

ArrayList是基于Object数组实现的,我们可以通过下标来实现对元素的取,即可以实现随机访问,但是在插入的时候,需要移动大量元素,所以对于能够随机访问,而不经常进行增删的需求,我们尽量使用ArrayList。而LinkedList是基于链表实现的,那么在进行增删的时候,只需要修改相应的指针,就可以实现元素的增删,效率非常高,所以对于需要快速增删元素,应该选择LinkedList。

我们不仅要好奇,为什么LinkedList的插入效率这么高呢?下面我们通过源码来一探究竟。

Java中list的使用之List的应用场景

从中,我们可以看出:通过add(int index,E element)向LinkedList插入元素时。先是在双向链表中找到要插入节点的位置index;找到之后,再插入一个新节点。

双向链表查找index位置的节点时,有一个加速动作:若index<双向链表长度的1/2,则从前向后查找;否则,从后向前查找。所以LinkedList的插入效率非常高,与之形成对比的,就是ArrayList的插入了。

Java中list的使用之List的应用场景

从上面的方法可以看出,在进行插入之前,首先会调用ensureCapacity()方法,来保证ArrayList的容量,如果容量不足,首先要进行扩容,然后真正费时的就是这句:

System.arraycopy(elementData,index,elementData,index+1,size-index)

这句话表明,在插入的时候,会移动index后面的所有元素,这就是ArrayList插入元素效率低的原因。

下面我们来分析一下ArrayList和LinkedList随机访问的效率。

首先来看LinkedList的随机访问:

Java中list的使用之List的应用场景

对于LinkedList来说,随机访问第index的元素,从头结点开始遍历,查找到index的位置,然后返回元素,这里只不过有一个加速遍历的动作而已。

但是对于ArrayList来说就不同了:

Java中list的使用之List的应用场景

从中,我们可以看出:通过get(int index)获取ArrayList第index个元素时。直接返回数组中index位置的元素,而不需要像LinkedList一样进行查找。

以上就是动力节点java培训机构的小编针对“Java中list的使用之List的应用场景”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>