java.util.ArrayList是数据结构/集合/或抽象数据类型的实现?

java.util.ArrayList是数据结构/集合/或抽象数据类型的实现?,java,data-structures,Java,Data Structures,都是关于术语的。我可以说列表是一种抽象数据类型,而数组列表是一种数据结构吗?因此,Java收集框架是一组AST和相应的DSs(实现)。List是一个接口。你总是有一个实现在背后,你不能像这样: List list = new List(); // does not work. At least not with java.util.List ArrayList是实现List接口的实现之一 因此,你可以这样说。接口(不仅在Java中,而且在C#、Go等语言中)是API的定义,是一个契约,它指定可

都是关于术语的。我可以说
列表
是一种抽象数据类型,而
数组列表
是一种数据结构吗?因此,Java收集框架是一组AST和相应的DSs(实现)。

List
是一个接口。你总是有一个实现在背后,你不能像这样:

List list = new List(); // does not work. At least not with java.util.List
ArrayList
是实现
List
接口的实现之一

因此,你可以这样说。

接口(不仅在Java中,而且在C#、Go等语言中)是API的定义,是一个契约,它指定可以在实现接口的实例上调用哪些方法。接口既不保存任何数据,也不实际实现契约本身。从这个意义上讲,可以说接口是一种抽象的数据结构<代码>列表是一个接口,也就是说,它是一个合同,描述如何使用有序的数据集合进行操作。一个接口可以使用进一步的契约方法扩展另一个接口。由于
列表
接口描述了一个有序的数据集合,因此它扩展了
集合
接口是非常有意义的,该接口仅定义了一个通用数据集合的契约(例如,不参考特定的排序或插入规则)。同样,我们可以将其描述为一个抽象的数据结构

ArrayList
List
接口的可能实现之一。因此,它还实现了
集合
接口。因此,它是一个具体的数据结构(以及集合本身),实现了多个抽象数据结构。然而,Java中也有一些抽象类,其中有些方法尚未实现。这些也是抽象数据结构,但不是接口。因此,Java中的接口是抽象数据结构,而不是抽象数据结构

此外,可以使用抽象数据结构(抽象类)实现接口(抽象数据结构本身)。给你一个思考练习:想想这是什么意思:)


那么,什么是抽象的呢?用泛型类型参数化的具体类在某种程度上是一种抽象数据结构,因为它抽象出适用于不同类的算法,这些算法可用于替代泛型类型。由于
ArrayList
本身就是使用Java泛型定义其操作的数据类型的具体实现之一,因此它本身就是一个抽象数据结构,但与接口或抽象类的方式不同。从这个意义上讲,抽象数据结构是一个定义不清的术语。

一句话(为了在这里获得最少的字符数),是的。不要在英语中使用反斜杠:它们实际上只适用于Windows文件名。请注意:使用新运算符调用接口永远不会起作用,而且不仅仅适用于这种情况。您必须始终提供一个实现类/对象来捕获它。我知道。从来没有说过别的。但请尝试使用
公共类列表扩展ArrayList{}
。这都是进口的问题……;)确切地说,但该列表类将是您自己的实现类,具有不同的包结构,并且与java.util.List中的列表接口无关。据我所知,我们可能在同一页上。当然会。你的或别人的。我只是对参考资料做了精确的说明。:)从技术上讲,结构本身不是抽象的吗?假设它描述了某物的组织。还是我的英语在这方面不及格?根据牛津词典()的规定,结构本身并不一定是抽象的(例如,当它所描述的东西被具体定义时)。如果它定义的东西是抽象的,那么它可以是抽象的,但也可以是非常具体的。在java接口中,抽象类、泛型类和任何非最终类都可以考虑抽象。前三个在上面已经描述过,后一个你可以用另一个类来扩展或覆盖,从而潜在地允许抽象出一些逻辑。根据“抽象”的定义,我倾向于同意,就像在“木制结构”中一样。然而,当我把“结构”定义为“复杂事物的部分或元素的排列和关系”时,这听起来很抽象,但这可能是一个相当哲学的观点。抱歉,忽略了第二个定义变量——“由多个部分构成的建筑物或其他对象”——这可能不是很抽象。数据结构中的结构不是由该定义准确描述的,而是由同一篇文章中的第二个定义准确描述的:“2.由多个部分构成的建筑物或其他对象”--据我所知,编程语言数据结构通常就是这样。但是,以您提供的第一个定义为例,将complex替换为composite,例如,“由多个部分组成”,它将是完全非抽象的,它是复合对象的具体安排和具体关系。按照这一思路,信息学中除原语外的一切都可以归入术语“结构”之下,表示一组数据的数据结构(相对于实用程序结构,如帮助器类)。结论:生成或描述有状态对象的每个类都是一个数据结构。如果您现在决定“抽象”在这个上下文中的意思是“不被实例化”,那么它将是一个有效的术语。