我有一个接受队列的函数,我想像Stack一样对它们执行操作。不幸的是,在Queue界面中看不到像addFirst这样的ArrayDeque方法,所以我不能使用它们。有没有办法在队列上执行堆栈操作?
谢谢!
答案 0 :(得分:0)
有!查看Collections类中的asLifoQueue(Deque<T> deque)
。 https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#asLifoQueue(java.util.Deque)
返回Deque作为后进先出(Lifo)队列的视图。方法 add映射到push,remove映射到pop等等。这个观点 当您想要使用需要队列的方法时,它可能很有用 但你需要Lifo订购。
它返回一个实现Queue接口的新类,除了将Queue方法重新绑定到Your Deque中的相应方法,以便它作为LIFO堆栈运行!
如果您寻找它们,Java库充满了神奇的东西!
答案 1 :(得分:0)
注意:如果您不能使用如下所示的OO方法,只需使用q
之类的队列,并按照下面的说明操作队列。
如果你必须使用队列,这是一个不错的解决方案,虽然更好的方法是使用Stack类,或者使用其他数据结构实现Stack。
public class MyStack<T> {
/**
* @param args
*/
private Queue<T> q = new LinkedList<T>();
public MyStack(){
}
public static void main(String[] args) {
MyStack<String> s = new MyStack<String>();
s.push("1");
s.push("2");
s.push("3");
s.push("4");
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
}
public void push(T s){
q.offer(s);
}
public T pop(){
int n = q.size();
for(int i = 0; i < n-1; i++){
q.offer(q.poll());
}
return q.poll();
}
}
输出:
4
3
2
1
空