JDK7中的双端队列Deque实现
双端队列Deque(全名double-ended queue)是一种数据结构,可在双端队列的两端插入、获取或删除元素。队列和栈可以认为是双端队列的特列。
Deque常用的方法:
First Element (Head) | Last Element (Tail) | |||
Throws exception | Special value | Throws exception | Special value | |
Insert | addFirst(e) | offerFirst(e) | addLast(e) | offerLast(e) |
Remove | removeFirst() | pollFirst() | removeLast() | pollLast() |
Examine | getFirst() | peekFirst() | getLast() | peekLast() |
Deque扩展了Queue接口,当Deque用作FIFO队列时,元素从双端队列队尾加入,从队首移出。从Queue接口继承的方法等同于Deque如下方法:
Queue Method | Equivalent Deque Method |
add(e) | addLast(e) |
offer(e) | offerLast(e) |
remove() | removeFirst() |
poll() | pollFirst() |
element() | getFirst() |
peek() | peekFirst() |
Deques也可作为LIFO栈。该接口应该优先于遗留的Stack类使用。当双端队列用作栈时,元素从队首入栈和出栈。Stack方法等同与Deque如下方法:
Stack Method | Equivalent Deque Method |
push(e) | addFirst(e) |
pop() | removeFirst() |
peek() | peekFirst() |
Note that the peek method works equally well when a deque is used as a queue or a stack; in either case, elements are drawn from the beginning of the deque.
public class PalindromeChecker { public static boolean palchecker(String str) { if(str==null || str.isEmpty()) return false; ArrayDeque aDeque = new ArrayDeque (str.length()); for(int i=0;i char ch = str.charAt(i); aDeque.addLast(new Character(ch)); } boolean res = true; while (aDeque.size()>1 && res) { Character first = aDeque.removeFirst(); Character last = aDeque.removeLast(); if(!first.equals(last)) res = false; } return res; } public static void main(String[] args) { System.out.println(palchecker("lsdkjfskf")); System.out.println(palchecker("radar")); } }