抽象数据类型的实现

问题描述

我正在学习 Java 和抽象数据类型,但我有点困惑。

基本上,据我所知,抽象数据类型是已定义但未实现的东西。所以我们有抽象数据类型的 API,我们需要实现 API 中指定的那些方法。例如,我们有一个 Stack,我们可以通过使用数组、节点等来实现它…… 例如,要声明这些对象,我们会这样做:

Stack ex = new ArrayStack();或 Stack ex = new NodeStack();

我的问题是,我们也可以做 Stack ex = new Stack();无需执行任何操作。在这种情况下,我们使用的是哪种实现?那么实施它有什么意义呢?我们可以在不自己实现的情况下选择要使用的实现吗?我很失落。

再举个例子,如果可以直接使用LinkedList,为什么还要创建节点来实现ADT?仅用于学习目的还是它们有所不同?

感谢您的帮助!

解决方法

您对抽象数据类型的描述是正确的。但是,如果您指的是 java.util.Stack<E>,它不是抽象的,您可以查看文档 here


编辑

LinkedList<E> 也不是抽象的,而是 List<E> 接口的实现。 Node<E> 类仅用于 LinkedList<E> 实现中。除了用于学习目的或在其他地方使用 Node 样式结构外,无需创建自己的版本。