您的位置:首页 > 其它

关于顺序存储和链式存储读写性能的比较(理论)

2018-03-11 16:49 357 查看
在内存中,数据有两种存储方式:顺序存储和链式存储,在Java中有也对应了两种封装的实现—>ArrayList和LinkedList

ArrayList

数组的特点:长度固定,可以用索引直接找到元素



插入数据:由于ArrayList的底层封装着一个可变数组(在JDK1.8中,初始容量位10,如果所需容量大于数组容量,则扩容,扩容机制为:新数组=原来数组长度+原来数组长度>>1),所以在计算量或者数量小的时候,运算还比较快,当数值频繁的扩容时候,ArrayList的性能就降低了,因为每次不够的时候要开辟新数组长度,而且要将原来数组中的数据复制到新数组中.

删除数据:数组中删除数据可以分为两步:1.找到元素2.将目标元素后面的元素向前移动

    假如数组长度为n,删除第几个元素就一共n-1次,所以删除后面的元素效率高,删除前面的效率低

修改数据:找到索引,直接将目标元素的值赋值为要修改的元素,效率高

查找数据:由于数有下标索引,所以直接根据索引找到数据,速度快

LinkedList



LinkedList的结构完全不同与数组类型,它不用连续的内存,依靠Node中的存下一个Node引用来存储.它是正真的动态数据结构;

插入数据:如果是单向链表,则插入的数据越多,效率越低,因为每次插入数据,要从头节点循环,假如现在Linked的节点数量为n则往向该链表中插入一个数据,要循环n次找到链表的尾部,然后插入效率低,如果是循环链表则插入数据也变得非常简单,因为头和尾相连,每次插入数据通过头可以找到尾,直接插入,效率高

删除数据:链表的删除可以分为两步:1.通过从头或者尾循环链表,找到目标位置前一个或者后一个,然后把他们相连接,所以删除靠经头节点或者尾节点的数据效率高,越靠近中间,效率越低

修改数据:先找到目标数据,要循环n次
4000
,然后将节点的数据设置为目标数据,较数组而言,比较复杂

查找数据:和修改数据的第一步相同,较数组而言,还是比较复杂

总结

就综合或者说大数据量情况来看,LinkedList的性能比ArrayList好,但是在一般应用中,都是展示数据,则需要读取性能好,所以通常用ArrayList
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: