Java中棧和佇列的類
阿新 • • 發佈:2018-11-27
Stack類:棧類 過時 public class Stack<E> extends Vector<E> Queue:佇列類 Deque:雙端佇列(棧操作建議使用) public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable public interface Deque<E> extends Queue<E> 擴充套件了java.util.Collection介面
雙端佇列
public interface Queue<E> extends Collection<E>
擴充套件了java.util.Collection介面
Queue使用時要儘量避免Collection的add()和remove()方法,而是要使用offer()來加入元素,使用poll()來獲取並移出元素。它們的優點是通過返回值可以判斷成功與否,add()和remove()方法在失敗的時候會丟擲異常。 如果要使用前端而不移出該元素,使用element()或者peek()方法。
所以Java中實現棧和佇列操作都可以通過使用LinkedList類實現,當然底層使用的連結串列。
public class ArrayDeque<E> extends AbstractCollection<E>
implements Deque<E>, Cloneable, Serializable
ArrayDeque是Deque 介面的大小可變陣列的實現
/** * 功能:模擬生活中羅盤子案例 * 技能:LinkedList * * LinkedList既可以當做線性表處理,也可以當做棧、佇列使用 * @author Administrator* */ public class TestDeque { public static void main(String[] args) { //建立一個棧 Deque deque = new LinkedList(); //羅盤子:入棧 // deque.addFirst("盤子1"); // deque.addFirst("盤子2"); // deque.addFirst("盤子3"); deque.push("盤子1"); deque.push("盤子2"); deque.push("盤子3"); //獲取最上面的盤子:獲取棧頂元素 // System.out.println(deque.getFirst()); // System.out.println(deque.getFirst()); // System.out.println(deque.getFirst()); System.out.println(deque.peek()); System.out.println(deque.peek()); System.out.println(deque.peek()); //拿走盤子:出棧 // System.out.println(deque.removeFirst()); // System.out.println(deque.removeFirst()); // System.out.println(deque.removeFirst()); System.out.println(deque.pop()); System.out.println(deque.pop()); System.out.println(deque.pop()); } }
/**
* 功能:模擬生活中超市購物排隊結算
* 技能:使用LinkedList實現佇列的操作
*
* @author Administrator
*
*/
public class TestQueue {
public static void main(String[] args) {
//建立一個佇列
java.util.Queue queue = new LinkedList();
//入隊
queue.offer("張三");
queue.offer("李四");
queue.offer("王五");
//獲取隊頭元素
System.out.println(queue.element());
System.out.println(queue.element());
System.out.println(queue.element());
//出隊
System.out.println(queue.remove());
System.out.println(queue.poll());
queue.offer("趙六");
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll());
}
}
/**
* 藉助棧實現進位制轉換(10----2)
* @author Administrator
*
*/
public class TestConversion {
public static void main(String[] args) {
int n = 13;
int t = n;
//String str = "";
Deque<Integer> deque = new LinkedList<Integer>();
while(t>0){
//除以2得到餘數作為二進位制位
int mod = t%2;
//System.out.print(mod);
//str = mod + str;
deque.push(mod);
//除以2得到商作為被除數繼續
int result = t/2;
t = result;
}
System.out.print(n+"--------->");
while(!deque.isEmpty()){
System.out.print(deque.pop());
}
}
}
總之:
1、深入理解pop的深層含義
2、分清是棧還是堆,以及二者的區別:
①:棧是後進先出,使用的關鍵詞是:pop,push和peek
②:堆是先進先出,使用的關鍵詞是:enqueue、dequeue和peek