从一个面试题开始:

数组
像这种面试题,基本都是考察数据结构和算法的知识。所以我们需要先从数据结构开始说起
在java中,我们的线性存储结构最底层最基本的就是数组了。但是数组是物理上连续的大小确定的储存空间
通过数组 我们可以根据下标快速的获取数据。
但是由于数组的大小是确定的,所以当我们想要修改或者删除一个节点就比较麻烦了

顺序表
然后就有了顺序表的ArrayList

其实顺序表的里面存储就是数组,顺序表的容器进行存储就是通过操作数组来进行的
所以顺序表通过index来查找容器内的数据就很直接
但是如果要添加或者删除顺序表中的元素,就会很复杂
当需要进行添加或者删除时,需要将要添加位置后面的数据进行位移,后面的整个数组都会发生变化(因为会有数据的位移)

链表

链表中的数据由数据部分和指向部分组成,数据部分存储数据,指向部分指向下一个数据,这样的话所有数据都是逻辑相连在一起的
链表的出现就是解决顺序表中删除或者添加节点带来的耗时问题

顺序表与链表

- 由于顺序表时物理上连续的所以查找和修改数据比较快,而链表在物理空间上不连续,在逻辑上连续所以删除增加元素快
- 但是缺点是 顺序表增加和删除元素要大量的移动数据,所以顺序表增删慢,链表在物理上不连续,所以链表查询需要进行轮询数据,所以链表查找会比较耗时
网友评论