import java.util.Stack;

//用两个栈实现
public class MyQueue {
    //定义两个栈
    Stack<Integer> stack1;
    Stack<Integer> stack2;

    public MyQueue() {
        stack1 = new Stack<>();
        stack2 = new Stack<>();
    }

    //入队方法
    public void push(int x){
        //1.将stack1中的弹出压入stack2中
        while (!stack1.isEmpty()){
            stack2.push(stack1.pop());
        }
        //2.将新元素压入stack1
        stack1.push(x);
        //3.将stack2中的元素弹出压入stack1
        while (!stack2.isEmpty()){
            stack1.push(stack2.pop());
        }
    }

    //出队方法
    public int pop(){
        return stack1.pop();
    }

    //获取队首元素方法
    public int peek(){
        return stack1.peek();
    }

    //判空
    public boolean empty(){
        return stack1.isEmpty();
    }
}
============================================================================================
import java.util.Stack;

//用两个栈实现
public class MyQueue2 {
    //定义两个栈
    Stack<Integer> stack1;
    Stack<Integer> stack2;

    public MyQueue2() {
        stack1 = new Stack<>();
        stack2 = new Stack<>();
    }

    //入队方法
    public void push(int x){
       stack1.push(x);
    }

    //出队方法
    public int pop(){
        //1.如果stack2为空,则把 stack1中的弹出压入
        if(stack2.isEmpty()){
           while (!stack1.isEmpty()){
               stack2.push(stack1.pop());
           }
        }
        //2.弹出stack2栈顶元素就行
        return stack2.pop();
    }

    //获取队首元素方法
    public int peek(){
        //1.如果stack2为空,则把 stack1中的弹出压入
        if(stack2.isEmpty()){
            while (!stack1.isEmpty()){
                stack2.push(stack1.pop());
            }
        }
        //2.返回stack2栈顶元素就行
        return stack2.peek();
    }

    //判空
    public boolean empty(){
        return stack1.isEmpty()&&stack2.isEmpty();
    }
}