Java中的隊列和雙端隊列是兩種不同類型的數據結構。隊列(Queue)是一種先進先出(FIFO)的數據結構,雙端隊列(Deque)則可以在隊列兩端進行插入和刪除操作。
// Queue Queue<String> q = new LinkedList<>(); q.add("a"); q.add("b"); q.add("c"); System.out.println(q.poll()); // 輸出a System.out.println(q.poll()); // 輸出b // Deque Deque<String> d = new LinkedList<>(); d.addFirst("a"); d.addLast("b"); d.addFirst("c"); System.out.println(d.pollFirst()); // 輸出c System.out.println(d.pollLast()); // 輸出b
在使用時,隊列通常用于實現先進先出的邏輯,例如消息隊列和緩存隊列。雙端隊列則可以用于實現雙向鏈表等數據結構。
除了Java自帶的隊列和雙端隊列,還可以使用Java的并發包中的隊列和雙端隊列。這些數據結構可以在多線程環境下安全地進行操作。
// 并發Queue BlockingQueue<String> bq = new LinkedBlockingQueue<>(); bq.put("a"); bq.put("b"); bq.put("c"); System.out.println(bq.take()); // 輸出a System.out.println(bq.take()); // 輸出b // 并發Deque BlockingDeque<String> bd = new LinkedBlockingDeque<>(); bd.putFirst("a"); bd.putLast("b"); bd.putFirst("c"); System.out.println(bd.takeFirst()); // 輸出c System.out.println(bd.takeLast()); // 輸出b
在使用并發隊列和雙端隊列時,需要注意線程安全問題,避免出現數據競爭和死鎖等問題。