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 voidmain(String[] args) {2 //使用offer添加元素,得到
3 Deque 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()是返回队头元素或栈顶元素即最左边的元素。