LinkedList-queue

107 阅读2分钟

在 Java 的 LinkedList 类中,尽管 LinkedList 本身是基于链表实现的,但它也实现了 Queue 接口和 Deque(双端队列)接口,这使得 LinkedList 可以被用作队列(Queue)或双端队列(Deque)来使用。下面我们将详细探讨如何使用 LinkedList 的队列(Queue)方法和双端队列(Deque)方法。

1. 作为队列(Queue)使用

当 LinkedList 被用作队列时,它遵循先进先出(FIFO)的原则。Queue 接口定义了队列操作的方法,如 offer() 用于添加元素到队列末尾,poll() 用于移除并返回队列头部的元素,以及 peek() 用于返回队列头部的元素但不移除它。

队列方法示例
java复制代码
	import java.util.LinkedList;  

	import java.util.Queue;  

	  

	public class LinkedListQueueExample {  

	    public static void main(String[] args) {  

	        Queue<Integer> queue = new LinkedList<>();  

	  

	        // 添加元素到队列  

	        queue.offer(1);  

	        queue.offer(2);  

	        queue.offer(3);  

	  

	        // 查看队列头部元素  

	        System.out.println("队列头部元素: " + queue.peek()); // 输出: 1  

	  

	        // 移除并返回队列头部元素  

	        System.out.println("移除的元素: " + queue.poll()); // 输出: 1  

	  

	        // 再次查看队列头部元素  

	        System.out.println("新的队列头部元素: " + queue.peek()); // 输出: 2  

	  

	        // 遍历队列  

	        for (Integer num : queue) {  

	            System.out.print(num + " "); // 输出: 2 3  

	        }  

	    }  

	}

2. 作为双端队列(Deque)使用

双端队列(Deque)是一个具有队列和栈的性质的抽象数据类型。它允许我们在两端添加或移除元素。Deque 接口提供了比 Queue 接口更多的操作,如 offerFirst()offerLast()pollFirst()pollLast()peekFirst()peekLast() 等。

双端队列方法示例
java复制代码
	import java.util.LinkedList;  

	import java.util.Deque;  

	  

	public class LinkedListDequeExample {  

	    public static void main(String[] args) {  

	        Deque<String> deque = new LinkedList<>();  

	  

	        // 在双端队列的两端添加元素  

	        deque.offerFirst("A");  

	        deque.offerLast("B");  

	  

	        // 访问并移除双端队列的首元素  

	        System.out.println("移除的首元素: " + deque.pollFirst()); // 输出: A  

	  

	        // 访问并不移除双端队列的尾元素  

	        System.out.println("尾元素: " + deque.peekLast()); // 输出: B  

	  

	        // 在双端队列的尾部添加元素  

	        deque.offerLast("C");  

	  

	        // 遍历双端队列  

	        System.out.println("双端队列元素: ");  

	        for (String str : deque) {  

	            System.out.print(str + " "); // 输出: B C  

	        }  

	  

	        // 移除并返回双端队列的尾元素  

	        System.out.println("移除的尾元素: " + deque.pollLast()); // 输出: C  

	    }  

	}

总结

LinkedList 由于实现了 Queue 和 Deque 接口,因此可以灵活地用作队列或双端队列。这使得 LinkedList 成为在需要队列或双端队列功能时的一个很好的选择。通过利用这些接口提供的方法,我们可以轻松地实现各种基于队列和双端队列的算法和数据结构。