?????卤?????????????????????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)];
????}