问题描述
我正在学习 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
样式结构外,无需创建自己的版本。