1.创建队列
1.1 使用Queue接口 , Queue的实现类有LinkedList和PriorityQueue。最常用的实现类是LinkedList。
Queue的六种方法:
add()和 offer()
向队列中添加元素,将元素压入队尾。当超出容量时add()会抛出异常 , offer()会返回false。
remove() 和 poll()
移除元素,将元素从队头移出。当当前容量为0执行移除操作时,remove()会抛出异常 , poll()会返回false。
element() 和 peek()
获取队头元素,当前容量为0时。element()会抛出异常 , peek()会返回null。
2.创建栈
使用Stack类,Stack是Java中本身具有的集合类型,所包含的方法包括:
boolean isEmpty() // 判断当前栈是否为空
synchronized E peek() //获得当前栈顶元素
synchronized E pop() //获得当前栈顶元素并删除
push(E object) //将元素加入栈顶
synchronized int search(Object o) //查找元素在栈中的位置,由栈低向栈顶方向数
3.Deque接口。
Deque是一个双端队列接口,继承自Queue接口,Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中LinkedList是最常用的。
1 public static void main(String[] args) {
2 //使用offer添加元素,得到
3 Deque<Integer> test = new LinkedList<>();
4 System.out.println("测试offer相关函数**************************************");
5 test.offer(1);
6 System.out.println(test);
7 test.offerFirst(0);
8 System.out.println(test);
9 //test.offerLast(2);
10 test.offer(2);
11 System.out.println(test);
12 /**
13 * offer() 与 offerLast()都是将元素添加到右边即队尾
14 * offerFirst()将元素添加到左边即队头
15 * push()是将元素压在左边队头
16 */
17 test.offer(3);
18 test.offer(4);
19 test.offer(5);
20 test.offer(6);
21 test.offer(7);
22 test.offer(8);
23 test.offer(9);
24 test.offer(10);
25 test.offer(11);
26 test.offer(12);
27
28 System.out.println(test);
29 test.poll();
30 System.out.println(test);
31 test.pollLast();
32 System.out.println(test);
33 test.pollFirst();
34 System.out.println(test);
35 /**
36 * poll()与pollFirst()等价,都是将队头元素移除
37 * pollLast()是将队尾元素移除
38 */
39 System.out.println("测试peek,element相关函数****************************************");
40 int temp = test.peek();
41 System.out.println(temp);
42 temp = test.peekLast();
43 System.out.println(temp);
44 temp = test.element();
45 System.out.println(temp);
46 temp = test.pop(); //这时候调用pop()返回的是队头元素
47 System.out.println(temp);
48 System.out.println(test);
49 System.out.println(test.contains(6)); //还有contain()函数判断是否包含某元素
50 /**
51 * peek()和peekFirst()都是返回队头元素
52 * peekLast()是返回队尾元素
53 */
54 System.out.println("测试remove相关函数**********************************************");
55 test.remove();
56 System.out.println(test);
57 test.removeFirst();
58 System.out.println(test);
59 test.removeLast();
60 System.out.println(test);
61 /**
62 * remove()和remove()是移除队头元素
63 * removeLast()是移除队尾元素
64 */
65 int pop = test.pop();
66 System.out.println(pop);
67 System.out.println(test);
68 /**
69 * 记住当是队列时,使用pop()弹出队头的元素
70 */
71 test.push(5);
72 System.out.println(test);
73 test.offer(5);
74 System.out.println(test);
75 test.poll();
76 System.out.println(test);
77 test.add(11);
78 System.out.println(test);
79 test.addLast(12);
80 System.out.println(test);
81 test.addFirst(13);
82 System.out.println(test);
83 /**
84 * add()和addLast()将元素加在右边,即队尾,和offer()方法等价
85 * addFirst()将元素加在左边,即队头
86 */
87 System.out.println();
88 System.out.println();
89 System.out.println();
90 System.out.println();
91 System.out.println("*********************************测试Deque实现堆栈相关函数********************************");
92 }
运行结果:
测试offer相关函数**************************************
[1]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
测试peek,element相关函数****************************************
2
11
2
2
[3, 4, 5, 6, 7, 8, 9, 10, 11]
true
测试remove相关函数**********************************************
[4, 5, 6, 7, 8, 9, 10, 11]
[5, 6, 7, 8, 9, 10, 11]
[5, 6, 7, 8, 9, 10]
5
[6, 7, 8, 9, 10]
[5, 6, 7, 8, 9, 10]
[5, 6, 7, 8, 9, 10, 5]
[6, 7, 8, 9, 10, 5]
[6, 7, 8, 9, 10, 5, 11]
[6, 7, 8, 9, 10, 5, 11, 12]
[13, 6, 7, 8, 9, 10, 5, 11, 12]
Deque使用总结:
3.1添加操作相关函数:
offer() :将元素添加到队尾,即添加到右侧
offerFirst():添加到队头
offerLast():添加到队头
add():将元素添加到队尾,即添加到右侧
addFirst():添加到队头
addLast():添加到队尾
push():将元素添加到队头,即添加到左侧
3.2 获取头部元素peek相关操作
peek() : 返回队头元素,即最左边的元素
peekFirst():返回队头元素
peekLast():返回队尾元素,即最右边的元素
element():返回队头元素,即最左边的元素
pop():返回队头元素即最左边的元素,并将其从队列中删除
3.3 remove相关函数
remove():移除队头元素,即最左边的元素
removeFirst():移除队头元素
removeLast():移除队尾元素
4.3 poll相关函数
poll():返回队头元素并移除,即最左边的元素
pollFirst():返回队头元素,即最左边的元素
pollLast():返回队尾元素,即最右边的元素
总结:当实现队列时,使用offer()进行添加操作 , 使用poll()进行出队操作,offer()和poll()要搭配使用
当实现堆栈时,使用push()进行添加操作,使用pop()进行出队操作,push()和pop()要搭配使用
peek()是返回队头元素或栈顶元素即最左边的元素。