Emr*_*boz -5 java queue stack data-structures
所以我很困惑,需要一个建议.在Java中,我可以实现自己的Stack,或者我可以使用java.util提供的Stack.
手册:
public class stack {
private int maxSize; //max size of stack
private char[] stackArray;
private int top; //index poistion of last element
public stack(int size){
this.maxSize=size;
this.stackArray=new char[maxSize];
this.top=-1; //
}
public void push(char j){
if (isFull()) {
System.out.println("SORRY I CANT PUSH MORE");
}else{
top++;
stackArray[top]=j;
}
}
public char pop(){
if(isEmpty()){
System.out.println("Sorry I cant pop more!");
return '0';
}else{
int oldTop=top;
top--;
return stackArray[oldTop];
}
}
public char peek(){
if(!isEmpty()) {
return stackArray[top];
}
}
public boolean isEmpty(){
return (top==-1);
}
public boolean isFull(){
return (maxSize-1 == top);
}
Run Code Online (Sandbox Code Playgroud)
第二种方式是Java库.
Stack<String> stacky = new Stack<>();
Run Code Online (Sandbox Code Playgroud)
队列的实现具有相同的情况. 而且,我不知道在哪种情况下使用哪种情况.
一般来说,您永远不应该使用您自己在Java运行时库中已有的东西的实现,因为该代码的测试方式比您的代码可能被测试的方式更多.
另外,一般来说,你永远不应该使用遗留java.util.Stack类,因为它是synchronized.正如javadoc Stack所说:
LIFO堆栈操作的更完整和一致的一组是由提供的
Deque接口和其实施方式中,这应该在优先使用这个类.例如:Run Code Online (Sandbox Code Playgroud)Deque<Integer> stack = new ArrayDeque<Integer>();
无论如何,对于你的问题"在java中实现堆栈的方式有多少?" ,Java运行时库中有5个堆栈实现:
Stack - 遗产,不推荐ArrayDeque - 通常是单线程使用的最佳选择ConcurrentLinkedDeque - 通常是多线程使用的最佳选择LinkedBlockingDeque - 如果您需要具有大小限制的堆栈LinkedList - 如果堆栈可能变大,并且您希望在收缩时回收空间当然,任何List实现都可以用作堆栈,但没有方便的方法,例如,ArrayList您可能希望使用list.add(list.size(), e)将元素推送到"堆栈".