这完全是关于术语。我可以说List
是抽象数据类型而ArrayList
是数据结构吗?因此,Java Collection Framework是一组AST和相应的DS(实现)。
答案 0 :(得分:4)
接口(不仅在Java中,而且在例如C#,Go等中)是API的定义,合同,指定可以在实现接口的实例上调用哪些方法。接口既不保存任何数据也不实际实现合同。从这个意义上讲,可以说接口是抽象数据结构。 List
是一个接口,它是一个描述如何使用有序数据集合进行操作的契约。接口可以使用其他合同方法扩展另一个接口。由于List
接口描述了有序的数据集合,因此它扩展了Collection
接口,这简单地定义了通用数据集合的合同(例如,没有引用特定的排序或插入)规则)。同样,可以将其描述为抽象数据结构。
ArrayList
是List
接口的可能实现之一。因此,它还实现了Collection
接口。因此,它是一个具体数据结构(以及一个集合本身),它实现了多个抽象数据结构。但是,Java中也有抽象类,有些方法没有实现。这些也是抽象数据结构,但不是接口。所以Java中的接口是一个抽象的数据结构,但反之亦然。
此外,可以有一个实现接口的抽象数据结构(抽象类)(抽象数据结构本身)。为你做一个思考练习:想一想这是什么意思:)
然而,什么是抽象的?使用泛型类型参数化的具体类在某种程度上是抽象数据结构,因为它抽象出适用于可用于替代泛型类型的不同类的算法。由于ArrayList
本身就是使用Java泛型来定义其操作的数据类型的具体实现之一,它本身就是一个抽象数据结构,但是以与接口或抽象不同的方式类。从这个意义上说,抽象数据结构是一个定义不明确的术语。
答案 1 :(得分:2)
List
是一个界面。你总是有一个实现,你不能像:
List list = new List(); // does not work. At least not with java.util.List
ArrayList
是实现List
接口的实现之一。
因此,如此说,你可以这样说。