--- jsr166/src/main/java/util/ArrayDeque.java 2016/11/20 07:24:11 1.118 +++ jsr166/src/main/java/util/ArrayDeque.java 2016/11/20 08:30:56 1.119 @@ -1104,17 +1104,16 @@ public class ArrayDeque extends Abstr private T[] toArray(Class klazz) { final Object[] es = elements; final T[] a; - final int size = size(), head = this.head, end; - final int len = Math.min(size, es.length - head); - if ((end = head + size) >= 0) { + final int head = this.head, tail = this.tail, end; + if ((end = tail + ((head <= tail) ? 0 : es.length)) >= 0) { a = Arrays.copyOfRange(es, head, end, klazz); } else { // integer overflow! - a = Arrays.copyOfRange(es, 0, size, klazz); - System.arraycopy(es, head, a, 0, len); + a = Arrays.copyOfRange(es, 0, end - head, klazz); + System.arraycopy(es, head, a, 0, es.length - head); } - if (tail < head) - System.arraycopy(es, 0, a, len, tail); + if (end != tail) + System.arraycopy(es, 0, a, es.length - head, tail); return a; }