在较为前期的内容中,我们接触过了数组(顺序存储)和链表(链式存储),最为直观的就是List集合中的ArrayList和LinkedList两个集合,那咱们来细究一下这两种数据结构的区别与数据关系。
内存差异
在内存中,顺序存储是会把数据存放在一块内存区域里,利用数据间的相对位置来进行查找,比如第一个数据为 Lm ,那第4个数据的内存就是 Lm+(4-1)d (假定每个数据的内存占用大小为d),那这样的话就能直接通过头数据的地址,来推断出其他数据的地址,这会使查询速度大大加快。
而链式存储是随机的内存地址,在链式存储中,是需要有一个头地址,头地址中会存在两部分的数据,一个是该数据的本身数据,另一个是下一个数据的地址,这样的话利用这个数据中的第二部分就可以查找到下一个数据,这样依次类推就可以实现数据的链式存放。
操作差异
由于内存上的差异,顺序存储和链式存储的增删改查的效率有很大的差别,在顺序存储中,由于每一个数据的地址都可以由首地址直接进行推算得出,所以顺序存储的查询很快,但是每一次的增删改都无法在已经确定好的地址中进行操作,只能再次重新创建一片区域来进行再次存储和赋值,为此,顺序存储的增删改操作是比较慢的。
而链式存储相比于顺序存储来说,有着更为灵活且独立的各个数据存储节点,所以链式存储的增删改是比较快的,只需要对前后两个节点进行重新的第二个地址数据的重新赋值就可以完成增删改操作,但是由于链式存储的内存是随机的,这也就导致了链式存储的查找只能是一次次的遍历遍历出来的,这就让它的查找相比于顺序存储来说会慢很多。
总结
根据顺序存储和链式存储的两方面差异,就决定了他们两个的适用条件不同,数组(顺序存储)快查询,增删改慢。而链式存储查询慢,增删改快。