java.util.ArrayDeque 类提供了可调整大小的阵列,并实现了Deque接口。以下是关于阵列双端队列的要点:
-
数组双端队列没有容量限制,使他们增长为必要支持使用。
-
它们不是线程安全的;如果没有外部同步。
-
不支持多线程并发访问。
-
null元素被禁止使用在数组deques。
-
它们要比堆栈Stack和LinkedList快。
此类及其迭代器实现Collection和Iteratorinterfaces方法可选。
类的声明
以下是java.util.ArrayDeque类的声明:
public class ArrayDeque<E> extends AbstractCollection<E> implements Deque<E>, Cloneable, Serializable
这里<E>代表一个元素,它可以是任何类。例如,如果你正在构建一个整数数组列表,那么初始化可为
ArrayList<Integer> list = new ArrayList<Integer>();
类构造函数
S.N. | 构造函数 & 描述 |
---|---|
1 | ArrayDeque() 此构造函数用于创建一个空数组双端队列容纳16个元素的初始容量。 |
2 | ArrayDeque(Collection<? extends E> c) 此构造函数用于创建一个包含指定集合的元素的双端队列。 |
3 | ArrayDeque(int numElements) 此构造函数用于创建一个空数组与双端队列的初始容量足以容纳指定的元素数。 |
类方法
S.N. | 方法 & 描述 |
---|---|
1 | boolean add(E e) 此方法将添加指定的元素,在此deque队列的末尾。 |
2 | void addFirst(E e) 此方法将添加指定的元素,在此deque队列的前面。 |
3 | void addLast(E e) 此方法将插入指定的元素,在此deque队列的末尾。 |
4 | void clear() 此方法移除此deque队列的元素。 |
5 | ArrayDeque<E> clone() 此方法返回此deque队列的副本。 |
6 | boolean contains(Object o) 如果此deque 队列包含指定的元素,此方法返回true。 |
7 | Iterator<E> descendingIterator() 此方法返回一个迭代器在此deque队列以逆向顺序的元素。 |
8 | E element() 此方法检索,但是不移除此deque队列表示的队列的头部。 |
9 | E getFirst() 此方法检索,但是不移除此deque队列的第一个元素。 |
10 | E getLast() 此方法检索,但是不移除此deque队列的最后一个元素。 |
11 | boolean isEmpty() 如果此deque队列不包含元素,此方法返回true。 |
12 | Iterator<E> iterator() 此方法返回一个迭代器在此deque队列的元素。 |
13 | boolean offer(E e) 此方法将指定的元素,在此deque队列的末尾。 |
14 | boolean offerFirst(E e) 此方法将指定的元素,在此deque队列的前面。 |
15 | boolean offerLast(E e) 此方法将指定的元素,在此deque队列的末尾。 |
16 | E peek() 此方法检索,但是不移除此deque队列表示的队列的头部,如果此deque队列为空,则返回null。 |
17 | E peekFirst() 此方法检索,但是不移除此deque 队列的第一个元素,或者如果此deque 队列为空,则返回null。 |
18 | E peekLast() 此方法检索,但是不移除此deque队列的最后一个元素,如果此deque队列为空,则返回null。 |
19 | E poll() 此方法检索并移除此deque队列表示的队列的头部,如果此deque队列为空,则返回null。 |
20 | E pollFirst() 此方法检索并移除此deque队列的第一个元素,或者如果此deque队列为空,则返回null。 |
21 | E pollLast() 此方法检索并移除此deque队列的最后一个元素,如果此deque队列为空,则返回null。 |
22 | E pop() 这种方法的此deque队列所表示的堆栈弹出一个元素。 |
23 | void push(E e) 这种方法将元素推入此deque队列所表示的堆栈。 |
24 | E remove() 此方法检索并移除此deque队列表示的队列的头部。 |
25 | boolean remove(Object o) 此方法从此deque队列中移除指定元素的单个实例。 |
26 | E removeFirst() 此方法检索并移除此deque队列的第一个元素。 |
27 | boolean removeFirstOccurrence(Object o) 此方法移除此deque队列的指定元素的第一个匹配。 |
28 | E removeLast() 此方法检索并移除此deque队列的最后一个元素。 |
29 | boolean removeLastOccurrence(Object o) 此方法移除此deque队列的指定元素的最后一次出现。 |
30 | int size() 此方法返回在此deque队列的元素个数。 |
31 | object[] toArray() 这个方法返回一个包含所有在此deque队列在适当的序列中元素的数组。 |
使用实例:leetcode 3 Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be a substring, "pwke"
is a subsequence and not a substring.
public class Solution {
public int lengthOfLongestSubstring(String s) {
int maxlen = 0;
Deque<Character> stack = new ArrayDeque<Character>();
for(int i = 0; i < s.length(); i++) {
if(stack.contains(s.charAt(i))) {
if(stack.size() > maxlen) {
maxlen = stack.size();
}
while(stack.peekFirst() != s.charAt(i)) {
stack.removeFirst();
}
stack.removeFirst();
stack.addLast(s.charAt(i));
} else {
stack.addLast(s.charAt(i));
}
}
return stack.size() > maxlen ? stack.size() : maxlen;
}
}