我正在尝试使用数组作为其核心在Java中实现堆栈。这只是学习和理解堆栈如何工作的目的。
我的想法是使用Array(而不是ArrayList)并尝试模仿Stack结构。此实现将具有静态大小。有一个以-1开头的指针指示空堆栈。指针将随着我们添加元素而增加,并且我们不必担心删除该元素,因为一旦需要该空间(索引),我们将覆盖该值。
以下是我的源代码,并附带一些问题:
import java.util.*;
public class stackUsingArray{
private int[] myStack;
private int pointer;
/**
-Constructor
*/
public stackUsingArray()
{
myStack = new int[10];
pointer = -1;//keep track of where the top element is on the stack.
}
/**
-Pop method
*/
public int pop()
{
if(pointer==-1)
{
//throw exception here
}
return myStack[pointer--];
}
/**
-Push when the stack is not empty.
*/
public void push(int num)
{
if(pointer== myStack.size()-1)
{
//throw exception here
}
else
{
myStack[++pointer] = num;//add to the stack
}
}
/**
-return the top element of the stack
*/
public void peek()
{
return pointer;
}
/**
-return false if there is not more element on the stack
*/
public boolean isEmpty()
{
return (pointer == -1)? true : false;
}
public static void main(String [] arg)
{
stackUsingArray newStack = new stackUsingArray();
newStack.push(1);
newStack.push(2);
newStack.push(3);
System.out.println(newStack.pop());
}
}
在我评论为异常的部分:
public int pop()
{
if(pointer==-1)
{
//throw exception here
}
return myStack[pointer--];
}
您认为哪种例外最合乎逻辑?大多数时候,我只是在屏幕上打印输出。但是,我很想学习如何引发异常。
这部分:
public void push(int num)
{
if(pointer== myStack.size()-1)
{
//throw exception here
}
else
{
myStack[++pointer] = num;//add to the stack
}
}
程序本身必须执行myStack.size()-1的操作。我想知道在班级中拥有一个私有成员来保持-1大小是否更好?我的意思是效率。
另外,如果我们要使用ArrayList来实现此Stack。它会更有效地运行吗?我的意思是,ArrayList有很多开销,例如方法的内部调用。
最后,我知道我的代码不是很好,所以请给我一些建议以使其更好!
我会抛出从RuntimeException派生的自定义StackEmptyException / StackFullException,因此未选中它们。如果未选中,则您的用户不必包围try / catch中的每个pop()。如果引发了检查的异常,则它们将不得不尝试/捕获每个弹出窗口,或者声明自己的方法作为引发异常。有关更多信息,请参见此讨论:Java:检查与未检查异常说明
程序本身必须执行myStack.size()-1的操作。我想知道在班级中拥有一个私有成员来保持-1大小是否更好?我的意思是效率。
它根本不会引起注意,不要执行只会节省一个或两个处理器周期的优化,而不会减少算法复杂性或I / O操作数量的优化。
另外,如果我们要使用ArrayList来实现此Stack。它会更有效地运行吗?我的意思是,ArrayList有很多开销,例如方法的内部调用。
如果您开始在内部扩展阵列,它将与您自己的实现相同地运行。
最后,我知道我的代码不是很好,所以请给我一些建议以使其更好!太感谢了!
对于一个学习项目来说,这是非常好的,请继续努力;)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句