Java Collections.asLifoQueue(deque)方法介紹

Deque是接口,具體繼承關係爲:Collection-->Queue-->Deque-->LinkedList、ArrayDeque、LinkedBlockingDeque

Collection 是層次集合結構中的根接口。Collection 表示一組對象,這些對象也稱爲 Collection 的元素。

Queue(隊列)接口與List、Set同一級別,都是繼承了Collection接口。Queue使用時要儘量避免Collection的add()和remove()方法,而是要使用offer()來加入元素,使用poll()來獲取並移出元素。它們的優點是通過返回值可以判斷成功與否,add()和remove()方法在失敗的時候會拋出異常。 如果要使用前端而不移出該元素,使用element()或者peek()方法。

Deque(雙端隊列)接口支持兩端插入和移除元素。名稱deque 是“double ended queue(雙端隊列)”的縮寫,通常讀爲“deck”。

實現了Deque的類有LinkedList、ArrayDeque、LinkedBlockingDeque。

LinkedList是大家用的比較多的,LinkedList不僅實現了Deque接口,還實現了List接口。LinkedList內部實現用的是鏈接鏈表(它的get()是比較慢的,而ArrayList內部實現用的是數組)。ArrayDeque是Deque接口的數組形式的實現,此類很可能在用作堆棧時快於Stack,在用作隊列時快於LinkedList。LinkedBlockingDeque是鏈表形式實現的阻塞雙端隊列(當超過隊列容量了,put操作會被阻塞,一直等待可用空間)。

此時我們再看Collections.asLifoQueue(deque)方法,它返回得就是一個棧形式的隊列。具體見示例代碼:

import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;


public class CollectionsTest {

	public static void main(String[] args) {
		
		LinkedList<Integer> llist1 = new LinkedList<Integer>(Arrays.asList(2, 4, 6)); 
		System.out.println(llist1);

		System.out.println(llist1.add(5));
		System.out.println(llist1);

		System.out.println(llist1.offer(9));
		System.out.println(llist1);

		System.out.println(llist1.element());
		System.out.println(llist1.peek());
		System.out.println(llist1);

		System.out.println(llist1.poll());
		System.out.println(llist1);
		
		System.out.println("-------------------------");

		LinkedList<Integer> llist2 = new LinkedList<Integer>(Arrays.asList(2, 4, 6)); 
		Queue q = Collections.asLifoQueue(llist2);
		System.out.println(q);

		System.out.println(q.add(5));
		System.out.println(q);

		System.out.println(q.offer(9));
		System.out.println(q);

		System.out.println(q.element());
		System.out.println(q.peek());
		System.out.println(q);

		System.out.println(q.poll());
		System.out.println(q);
	}
}


運行結果截圖:


發佈了48 篇原創文章 · 獲贊 54 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章