前言
队列
特点:先进先出
LinkedList(双向链表)实现两个接口:Queue(队列)和Deque(双端队列)
代码我们可以这样写
我们看一下Queue能够使用的方法有哪些
这些方法的过程当中就是普通的队列,支持队尾进队头出
我们看一下Deque(双端队列)的
如果拿Deque来引用本质上来说就是双端队列
普通的队列只能队尾进队头出
双端队列:两边既可以进,也可以出.可以当做栈来使用
看一下方法:
方法多了好多
Dueue的方法
add方法.offer方法,添加元素
public class TestDome { public static void main(String[] args) { Queue<Integer> queue = new LinkedList<>(); queue.add(1); queue.offer(2); System.out.println(queue); }
打印结果:
peeK方法,element方法,获取队头元素
public class TestDome { public static void main(String[] args) { Queue<Integer> queue = new LinkedList<>(); queue.add(1); queue.offer(2); System.out.println(queue.peek());//获取对头元素 System.out.println(queue.element());//获取对头元素 } }
打印结果:
poll方法,remove方法,出
public class TestDome { public static void main(String[] args) { Queue<Integer> queue = new LinkedList<>(); queue.add(1); queue.offer(2); //System.out.println(queue.peek());//获取队头元素 //System.out.println(queue.element());//获取队头元素 System.out.println(queue.poll()); System.out.println(queue.remove()); } }
打印结果:
1
2
对于LinkedList来说,不仅可以当做普通的队列,也可以当做双端队列,也可以当做双向链表,也可以当做栈
链表实现队列
class Node{ public int val; public Node next; public Node(int val){ this.val = val; } } class MyQueue{ public Node head; public Node last; /** *尾插法 */ public void offer(int val){ Node node = new Node(val); if(head == null){ head = node; last = node; }else{ last.next = node; last = last.next; } } public int poll(){ if(isEmpty()){ throw new RuntimeException("队列为空"); } int oldVal = head.val; this.head = head.next; return oldVal; } public int peek(){ return head.val; } public boolean isEmpty(){ return this.head == null; } } public class TestQueue { }