?????±?????????????????????head = (head - 1) & (elements.length - 1)?????????δ?????????????????head??????????????elements.length??????2?????????elements - 1????????λ?1????head - 1???????????????????????head - 1?????????????????-1???????????????????elements.length?????
???????????????????doubleCapacity()????????????????????????饗?????????????????????鸴????????????????????

????????????????????????ν??У?????θ???head????????????θ???head????????
????//doubleCapacity()
????private void doubleCapacity() {
????assert head == tail;
????int p = head;
????int n = elements.length;
????int r = n - p; // head??????????
????int newCapacity = n << 1;//?????2??
????if (newCapacity < 0)
????throw new IllegalStateException("Sorry?? deque too big");
????Object[] a = new Object[newCapacity];
????System.arraycopy(elements?? p?? a?? 0?? r);//?????????????????????????
????System.arraycopy(elements?? 0?? a?? r?? p);//?????????????????л??????
????elements = (E[])a;
????head = 0;
????tail = n;
????}
????addLast()
????addLast(E e)??????????Deque??β??????????????tail??λ?ò???????????tail?????????????????????λ?????????elements[tail] = e;???ɡ?????????????????????????ù??????doubleCapacity()?????????

????public void addLast(E e) {
????if (e == null)//?????????null
????throw new NullPointerException();
????elements[tail] = e;//???
????if ( (tail = (tail + 1) & (elements.length - 1)) == head)//?±???紦??
????doubleCapacity();//????
????}
?????±???紦????addFirt()????????????????????
????pollFirst()
????pollFirst()?????????????????Deque????????????headλ???????????????????????????????elements[head]??????????????????±??????????ArrayDeque?в????????null????elements[head] == null?????ζ??????????
????public E pollFirst() {
????E result = elements[head];
????if (result == null)//null???ζ??deque???
????return null;
????elements[h] = null;//let GC work
????head = (head + 1) & (elements.length - 1);//?±???紦??
????return result;
????}
????pollLast()
????pollLast()?????????????????Dequeβ???????????tailλ?????????????
????public E pollLast() {
????int t = (tail - 1) & (elements.length - 1);//tail???????λ???????????
????E result = elements[t];
????if (result == null)//null???ζ??deque???
????return null;
????elements[t] = null;//let GC work
????tail = t;
????return result;
????}
????peekFirst()
????peekFirst()?????????????????Deque????????????headλ???????????????elements[head]???ɡ?
????public E peekFirst() {
????return elements[head]; // elements[head] is null if deque empty
????}
????peekLast()
????peekLast()?????????????????Dequeβ???????????tailλ?????????????
????public E peekLast() {
????return elements[(tail - 1) & (elements.length - 1)];
????}