根據您的需要,您可能需要ArrayDeque
或LinkedList
。
兩者都執行Deque
(雙端隊列)。
來自Javadoc ArrayDeque
:「當用作堆棧時,該類可能比Stack快,並且在用作隊列時比LinkedList快。
元素可以從Deque
的任一端添加或刪除。
甲Deque
可以通過調用addLast
和removeFirst
用作隊列,並且也可以通過堆疊使用addLast
和removeLast
使用。
如果你真的想表現得像任何一個,你可以保持一個布爾標誌,寫輔助方法,或者你可以寫一個類:
public class QueueOrStack<E> implements Iterable<E> {
private Deque<E> container = new ArrayDeque<E>();
private boolean isQueue;
public QueueOrStack(boolean isQueue) {
this.isQueue = isQueue;
}
public E pop() {
return isQueue ? container.removeFirst() : container.removeLast();
}
public void push(E element) {
container.addLast(element);
}
public void pushAll(E... element) {
for (E e : element)
container.addLast(e);
}
public boolean isQueue() {
return isQueue;
}
public void setQueue(boolean isQueue) {
this.isQueue = isQueue;
}
public boolean toggleQueue() {
return isQueue = !isQueue;
}
@Override
public Iterator<E> iterator() {
return container.iterator();
}
}
這裏的測試:
QueueOrStack<String> strings = new QueueOrStack<>(true);
strings.pushAll("hello", ", " , "world\n");
for(String s : strings)
System.out.print(s); //"hello, world"
System.out.println(strings.pop()); //"hello"
strings.toggleQueue();
System.out.println(strings.pop()); //"world"
爲什麼不'java.util.Queue'和'java.util.Stack '爲你工作? –
Moira
它必須是Something <>的一個變量,它可以存儲 –