关于顺序存储和链式存储读写性能的比较(理论)
2018-03-11 16:49
357 查看
在内存中,数据有两种存储方式:顺序存储和链式存储,在Java中有也对应了两种封装的实现—>ArrayList和LinkedList
插入数据:由于ArrayList的底层封装着一个可变数组(在JDK1.8中,初始容量位10,如果所需容量大于数组容量,则扩容,扩容机制为:新数组=原来数组长度+原来数组长度>>1),所以在计算量或者数量小的时候,运算还比较快,当数值频繁的扩容时候,ArrayList的性能就降低了,因为每次不够的时候要开辟新数组长度,而且要将原来数组中的数据复制到新数组中.
删除数据:数组中删除数据可以分为两步:1.找到元素2.将目标元素后面的元素向前移动
假如数组长度为n,删除第几个元素就一共n-1次,所以删除后面的元素效率高,删除前面的效率低
修改数据:找到索引,直接将目标元素的值赋值为要修改的元素,效率高
查找数据:由于数有下标索引,所以直接根据索引找到数据,速度快
LinkedList的结构完全不同与数组类型,它不用连续的内存,依靠Node中的存下一个Node引用来存储.它是正真的动态数据结构;
插入数据:如果是单向链表,则插入的数据越多,效率越低,因为每次插入数据,要从头节点循环,假如现在Linked的节点数量为n则往向该链表中插入一个数据,要循环n次找到链表的尾部,然后插入效率低,如果是循环链表则插入数据也变得非常简单,因为头和尾相连,每次插入数据通过头可以找到尾,直接插入,效率高
删除数据:链表的删除可以分为两步:1.通过从头或者尾循环链表,找到目标位置前一个或者后一个,然后把他们相连接,所以删除靠经头节点或者尾节点的数据效率高,越靠近中间,效率越低
修改数据:先找到目标数据,要循环n次
4000
,然后将节点的数据设置为目标数据,较数组而言,比较复杂
查找数据:和修改数据的第一步相同,较数组而言,还是比较复杂
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相关文章推荐
- 软考--顺序存储与链式存储的比较
- 关于二叉树的顺序存储和链式存储
- 线性表顺序存储与链式存储的比较
- 关于Hashtable与ArrayList存储string的性能比较
- 顺序存储(数组)和链式存储(指针)的比较以及线性表小解义
- 数据结构_线性表_顺序/链式存储优缺点比较
- X9BYOD与传统集群存储读写性能比较
- 数据结构存储,顺序和链式比较d
- 顺序存储和链式存储的比较
- 关于Docker读写性能的资料
- 关于NoSQL的思考:为什么我们要优化存储的写性能
- SD--关于定价过程中的存储顺序的参考结构和参考字段的使用代码跟踪
- 关于位域的字节内存储顺序、字节对齐、字节序以及符号
- [SDUT](2116)数据结构实验之链表一:顺序建立链表 ---链式存储(线性表)
- 关于存储网络技术比较详细的介绍
- Java 之 文件读写及性能比较总结
- 关于读写存储本地文件
- 二叉树的顺序存储和链式存储
- 关于NoSQL的思考:为什么我们要优化存储的写性能
- Innodb 关于blob、text字段的存储以及性能