Queue集合

  Queue用於模擬隊列這種數據結構,新元素插入(offer)到隊列的尾部,訪問元素(poll)操作會返回隊列頭部的元素。通常,隊列不允許隨機訪問隊列中的元素。
   Queue接口中定義瞭如下幾個方法。

void add(Object e):將指定元素加入此隊列的尾部
Object element():獲取隊列頭部的元素,但是不刪除該元素
boolean offer(Object e):將指定元素加入此隊列的尾部
Object peek():獲取隊列頭部的元素,如果此隊列爲空,則返回null。
Object poll():獲取隊列頭部的元素,並刪除該元素,如果此隊列爲空,則返回null。
Object remove():獲取隊列頭部元素並刪除

PriorityQueue

public class PriorityQueueTest
{
    public static void main(String[] args)
    {
        PriorityQueue pq = new PriorityQueue();
        // 下面代碼依次向pq中加入四個元素
        pq.offer(6);
        pq.offer(-3);
        pq.offer(20);
        pq.offer(18);
        // 輸出pq隊列,並不是按元素的加入順序排列
        System.out.println(pq); // 輸出[-3, 6, 20, 18]
        // 訪問隊列第一個元素,其實就是隊列中最小的元素:-3
        System.out.println(pq.poll());
    }
}

Deque接口與ArrayDeque實現類

   Deque接口是Queue接口的子接口,代表一個雙端隊列,Deque接口提供了一個典型的實現類:ArrayDeque。
   下面程序示範了把ArrayDeque當成“棧”來使用

public class ArrayDequeStack
{
    public static void main(String[] args)
    {
        ArrayDeque stack = new ArrayDeque();
        // 依次將三個元素push入"棧"
        stack.push("瘋狂Java講義");
        stack.push("輕量級Java EE企業應用實戰");
        stack.push("瘋狂Android講義");
        // 輸出:[瘋狂Android講義, 輕量級Java EE企業應用實戰, 瘋狂Java講義]
        System.out.println(stack);
        // 訪問第一個元素,但並不將其pop出"棧",輸出:瘋狂Android講義
        System.out.println(stack.peek());
        // 依然輸出:[瘋狂Android講義, 瘋狂Java講義, 輕量級Java EE企業應用實戰]
        System.out.println(stack);
        // pop出第一個元素,輸出:瘋狂Android講義
        System.out.println(stack.pop());
        // 輸出:[輕量級Java EE企業應用實戰, 瘋狂Java講義]
        System.out.println(stack);
    }
}

   當然ArrayDeque也可以當成隊列使用,此處ArrayDeque將按“先進先出”的方式操作集合元素。

public class ArrayDequeQueue
{
    public static void main(String[] args)
    {
        ArrayDeque queue = new ArrayDeque();
        // 依次將三個元素加入隊列
        queue.offer("瘋狂Java講義");
        queue.offer("輕量級Java EE企業應用實戰");
        queue.offer("瘋狂Android講義");
        // 輸出:[瘋狂Java講義, 輕量級Java EE企業應用實戰, 瘋狂Android講義]
        System.out.println(queue);
        // 訪問隊列頭部的元素,但並不將其poll出隊列"棧",輸出:瘋狂Java講義
        System.out.println(queue.peek());
        // 依然輸出:[瘋狂Java講義, 輕量級Java EE企業應用實戰, 瘋狂Android講義]
        System.out.println(queue);
        // poll出第一個元素,輸出:瘋狂Java講義
        System.out.println(queue.poll());
        // 輸出:[輕量級Java EE企業應用實戰, 瘋狂Android講義]
        System.out.println(queue);
    }
}

LinkedList實現類

   LinkedList類是List接口的實現類,可以根據索引來隨機訪問集合中的元素,除此之外,還實現了Deque接口,可以被當成雙端隊列來使用。

public class LinkedListTest
{
    public static void main(String[] args)
    {
        LinkedList books = new LinkedList();
        // 將字符串元素加入隊列的尾部
        books.offer("瘋狂Java講義");
        // 將一個字符串元素加入棧的頂部
        books.push("輕量級Java EE企業應用實戰");
        // 將字符串元素添加到隊列的頭部(相當於棧的頂部)
        books.offerFirst("瘋狂Android講義");
        // 以List的方式(按索引訪問的方式)來遍歷集合元素
        for (int i = 0; i < books.size() ; i++ )
        {
            System.out.println("遍歷中:" + books.get(i));
        }
        // 訪問、並不刪除棧頂的元素
        System.out.println(books.peekFirst());
        // 訪問、並不刪除隊列的最後一個元素
        System.out.println(books.peekLast());
        // 將棧頂的元素彈出“棧”
        System.out.println(books.pop());
        // 下面輸出將看到隊列中第一個元素被刪除
        System.out.println(books);
        // 訪問、並刪除隊列的最後一個元素
        System.out.println(books.pollLast());
        // 下面輸出:[輕量級Java EE企業應用實戰]
        System.out.println(books);
    }
}
發佈了51 篇原創文章 · 獲贊 23 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章