表的简单数组实现
虽然数组是由固定容量创建的,但在需要的时候可以用双倍的容量创建一个不同的数组。它解决由于使用数组而产生的最严重的问题,即为了使用一个数组,需要对表的大小进行估计。而这种估计在Java或任何现代编程语言中都是不需要的。
下列程序段解释一个数组arr在必要的时候如何被扩展:
int[] arr = new int[10];
...
// 下面我们决定扩大 arr
int[] newArr = new int[arr.length * 2];
for (int i = 0; i < arr.length; i++) {
newArr[i] = arr[i];
}
arr = newArr;
然而,如果发生对表的一些插入和删除操作,特别是对表的前端进行,那么数组就不是一种好的选择。
简单链表
为了避免插入和删除的线性开销,我们需要保证表可以不连续存储,否则表的每个部分都可能需要整体移动。
链表由一系列节点组成,节点不必在内存中相连。每一个节点均含有表元素和到后继元素的节点的链(next链)。最后一个节点的next链引用null。
双链表