ArrayDeque

本文介绍了Java中的ArrayDeque类,一种可调整大小的数组实现的双端队列。文章详细解释了ArrayDeque的特点、构造方法及常用操作方法,并通过示例展示了如何使用ArrayDeque解决LeetCode中的最长无重复字符子串问题。
摘要由CSDN通过智能技术生成

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队列的元素个数。
31object[] 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.

answer

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;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值