-1
Я создал очередь, используя два стека из класса стека, который я создал. Мне интересно, возможно ли иметь возможность считывать все элементы в очереди, чтобы они не потерялись из стека?Создание toString в очереди из двух стеков
Вопрос: Могу ли я создать toString внутри MyQueue.java, который будет перечислять порядок очереди.
Вот мои два файла
MyQueue.java
import java.util.NoSuchElementException;
public class MyQueue<T> {
private MyStack<T> stack1; // back of queue
private MyStack<T> stack2; // front of queue
public MyQueue() {
stack1 = new MyStack<T>();
stack2 = new MyStack<T>();
}
private void moveStack1ToStack2()throws Exception {
while (!stack1.isEmpty())
stack2.push(stack1.pop());
}
public boolean isEmpty() {
return stack1.isEmpty() && stack2.isEmpty();
}
public T peek() throws Exception {
if (isEmpty()) throw new NoSuchElementException("Queue underflow");
if (stack2.isEmpty()) moveStack1ToStack2();
T result = stack2.peek();
return result;
}
// add the item to the queue
public void enqueue(T item) throws Exception
{
stack1.push(item);
}
public T dequeue() throws Exception {
if (isEmpty()) throw new NoSuchElementException("Queue underflow");
if (stack2.isEmpty())
{
moveStack1ToStack2();
}
return (T)stack2.pop();
}
public int size()
{
return stack1.size() + stack2.size();
}
}
MyStack.java
import java.util.ArrayList;
import java.util.EmptyStackException;
public class MyStack<T> {
private ArrayList<T> al;
public MyStack() {
al = new ArrayList<T>();
}
public void push(T item) {
al.add(item);
}
public T pop() {
if (!isEmpty())
return al.remove(size()-1);
else
throw new EmptyStackException();
}
public boolean isEmpty() {
return (al.size() == 0);
}
public T peek()
{
if (!isEmpty())
return al.get(size()-1);
else
throw new EmptyStackException();
}
public int size() {
return al.size();
}
public String toString()
{
return al.toString();
}
}