Stack学习时遇到问题(接口中方法实现时错误)

来源:3-2 栈的基本实现

就干万元户

2018-12-03

老师你好,在学习Stack简单实现时遇到如下问题
1.我们对于Stack的实现是基于数组进行的,那是否可以理解成栈的底层其实就是使用数组实现的,只不过进行了存取方式上简单的改动(先进后出的特点)
2.在进行Stack简单实现时遇到问题,实现接口中void push(E e);接口时出现错误
提示:图片描述然后我在接口中方法提示部分进行了自动实现如下图:图片描述
自动实现之后是这样的(参数部分的类型不是泛型而是Object)
图片描述
然后我检查了一下,自己定义的Stack接口和ArrayStack的泛型确实是E类型的
所以不知道问题出在哪,请老师帮忙解答,并且告知原因,下面是完整的源代码

接口Stack

public interface Stack<E> {
    int getSize();
    boolean isEmpty();
    void push(E e);
    E pop();
    E peek();
}

实现类ArrayStack

public class ArrayStack<E> implements Stack{
    Array<E> array;

    public ArrayStack(int capacity){
        array = new Array<>(capacity);
    }

    public ArrayStack(){
        array = new Array<>();
    }

    @Override
    public int getSize(){
        return array.getSize();
    }

    @Override
    public boolean isEmpty(){
        return array.isEmpty();
    }

    @Override
    public void push(Object o) {
        array.addLast(o);
    }


    public int getCapacity(){
        return array.getCapacity();
    }


    @Override
    public E pop(){
        return array.removeLast();
    }

    @Override
    public E peek(){
        return array.getLast();
    }
}

谢谢!

写回答

1回答

liuyubobobo

2018-12-03

可以:)Java标准库中的Stack就是基于动态数组实现的。

但是在课程后面,你会看到,使用链表也可以实现栈:)栈本身是一种抽象数据结构:)


2

这个课程的所有代码都可以通过官方github获得,传送门:https://github.com/liuyubobobo/Play-with-Data-Structures

请尝试在你的环境运行官方代码,看是否有同样的问题?如果没有问题,请仔细比较调试自己的代码实现和官方代码的区别:)


如果也有问题,请确认一下自己的环境的JDK是8或者以上版本。本课程的所有Java代码都是基于JDK8的:)


==========


提示:

ArrayStack的声明应该是:public class ArrayStack<E> implements Stack<E>

因为Stack接口也需要泛型:)


加油!:)

2
2
就干万元户
已解决 谢谢!
2018-12-03
共2条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程