Java 堆、棧、佇列(遇見再更新)
阿新 • • 發佈:2021-11-18
目錄
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。