Java和堆栈:正确的实现?

时间:2012-09-01 15:27:18

标签: java stack

我创建了这个非常简单的堆栈概念的实现。 你能告诉我它是否正确和清洁?你看到任何糟糕的编码习惯吗?

public class MyStack
{
    private static final int MAXELEMENTS = 10;
    private int[] elements;
    private int numElements;

    public MyStack()
    {
        numElements = 0;
        elements = new int[MAXELEMENTS];
    }

    public boolean isEmpty()
    {
        return (numElements == 0);
    }

    public boolean isFull()
    {
        return (numElements == MAXELEMENTS);
    }

    public void push(int e)
    {
        if (!isFull())
            elements[numElements++] = e;
    }

    public int top()
    {
        if (!isEmpty())
            return elements[numElements - 1];
        else
            return -1;
    }

    public void pop()
    {
        if (!isEmpty())
            numElements--;
    }
}

您可以使用以下代码:

class MyStackTestDrive
{
    public static void main(String[] args)
    {
        MyStack s1 = new MyStack();
        MyStack s2 = new MyStack();
        s1.push(2);
        s2.push(4);
        System.out.println(s1.top());
        System.out.println(s2.top());
    }
}

3 个答案:

答案 0 :(得分:2)

我的评论是:

  1. 这只是int的堆栈。你应该把它变成通用的
  2. 这是一个只有10个元素的堆栈。用处不多
  3. numElements是堆栈变量顶部的错误名称
  4. topthrow和空堆栈(传统)
  5. 的异常
  6. pop应该返回堆栈的顶部。现在是void

答案 1 :(得分:2)

我会做一些事情,其中​​一些只是偏好:

  • 将“numElements”重命名为“head”以更好地反映其功能。
  • 添加一个构造函数,其中可以指定堆栈的最大大小。
  • pop方法应该返回堆栈的顶部元素并将其删除。这是标准语义。
  • top和pop应该在空堆栈上调用时抛出异常。这是为了防止在没有先检查它的情况下操作空堆栈的错误。

答案 2 :(得分:1)

你应该尝试让你的堆栈通用(如果你想允许添加任何其他类型),你应该尝试通过在你的推送方法中使用检查并且如果它已经满了你自动增长它为它重新分配空间(创建另一个数组,可能是先前两次的空间,并逐个重新分配)。例如,你使用数组而不是链表的任何方式,恕我直言都是上帝的想法。