数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系 的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行速度和存储效率。数据结构主要包含以下 4 种逻辑结构:
在 Java 企业级开发中,存在各种各样的数据结构,这些数据结构被 JDK 和各种 Java 框架实现。同时,数据结构也是互联网公司面试中常见的考点。熟练掌握数据结构的知识有助于开发人员更好 地学习 JDK 和各种 Java 框架的核心代码,提升面试通过率。
线性表是由 N 个相同数据类型的数据元素组成的有限序列,其中除了第一个数据元素外, 每个元素有且仅有一个直接前驱结点,除最后一个数据元素外,每个元素有且仅有一个直接后继结点。
线性表数据类型主要包括两个方面:数据元素集合和该数据元素集合上的操作集合。数据元素集合可以表示为 A0,A1,A2,...,An-1 大小为 N 的数据集合。
操作集合包括以下操作:
线性表是一种逻辑结构,这种逻辑结构在计算机中的表现形式(存储结构)主要有以下两种:
由于线性表有顺序表和链表两种实现形式,因此可以通过软件工程的设计思想对线性表这种 数据结构进行抽象,由不同的子类生成不同的线性表的实现。
本节将定义一个 List 接口,该接口定义了线性表的规范,即定义线性表需要实现的基本操作, 这些操作包括插入元素、删除元素、查找元素、判断表是否为空和查询线性表元素个数。List 接口 代码如下:
顺序表采用顺序结构存储数据,在 Java 语言中常用的顺序存储结构是数组。顺序表如图 2-1 所示。
在顺序表指定位置添加元素,首先需要确定指定位置是否已经有元素。如果指定位置没有元素,就直接加入元素,如图 2-2 所示。
如果指定位置已经有元素,就需要将指定位置处的元素及其后续元素依次向后移动,将指定位置空出后,插入指定元素,如图 2-3 所示。
当顺序表按照索引查找元素时,将以 O(1)的时间复杂度查找到指定的元素,如图 2-4 所示。
顺序表按照元素值查询指定元素时,需要从第一个元素开始依次向后查找元素,直至找到指 定元素,查找的时间复杂度为 O(n)。查找 V5 元素的过程如图 2-5 所示。
如果从顺序表删除的元素是末尾元素,就直接删除即可,如图 2-6 所示。
如果删除的元素并非末尾元素,就已删除元素后面的所有元素将依次向前移动,如图 2-7 所示。