1. 程式人生 > 其它 >Java 堆、棧、佇列(遇見再更新)

Java 堆、棧、佇列(遇見再更新)

目錄

Java 棧、佇列

常用方法

boolean empty() 測試堆疊是否為空
Object peek() 檢視堆疊頂部的物件
Object pop() 棧頂元素出棧
Object push(Object element)元素入棧
int search(Object element) 返回物件在堆疊中的位置,以 1 為基數

案例

public void test(int x) {
        Stack<Integer> s1 = new Stack<Integer>();
        Stack<Integer> s2 = new Stack<Integer>();
        s1.push(x);
        s2.push(x);
        int p1 = s1.peek();
        int p2 = s2.peek();
        System.out.println(p1==p2);
        System.out.println(s1.peek() == s2.peek());
}

如果x在[-128, 127],那麼兩次都會輸出true;如果不是在這個範圍,會輸出true和false。
原因在於autobox,對於某些值,s1.push(x)會轉化為s1.push(Integer.valueOf(x)),然後會利用cache的值,導致例項複用。

佇列

LinkedList類實現了Queue介面,因此我們可以把LinkedList當成Queue來用。

LinkedList:底層使用雙向連結串列儲存,對於頻繁的插入、刪除操作效率更高

//add()和remove()方法在失敗的時候會丟擲異常(不推薦)
 Queue<String> queue = new LinkedList<String>();

queue.offer("a");//新增元素
queue.poll();//第一個元素出佇列,poll() 方法在用空集合呼叫時不是丟擲異常,只是返回 null
queue.peek());//獲得隊首元素,不出佇列。在佇列為空時,peek() 返回 null。