private boolean delete ( int i ) { //checkInvariants(); final Object [ ] elements = this . elements ; final int mask = elements . length - 1 ; final int h = head ; final int t = tail ; final int front = ( i - h ) & mask ; final int back = ( t - i ) & mask ; // Invariant: head <= i < tail mod circularity if ( front >= ( ( t - h ) & mask ) ) throw new ConcurrentModificationException ( ) ; // Optimize for least element motion if ( front < back ) { if ( h <= i ) { System . arraycopy ( elements , h , elements , h + 1 , front ) ; } else { // Wrap around System . arraycopy ( elements , 0 , elements , 1 , i ) ; elements [ 0 ] = elements [ mask ] ; System . arraycopy ( elements , h , elements , h + 1 , mask - h ) ; } elements [ h ] = null ; head = ( h + 1 ) & mask ; return false ; } else { if ( i < t ) { // Copy the null tail as well System . arraycopy ( elements , i + 1 , elements , i , back ) ; tail = t - 1 ; } else { // Wrap around System . arraycopy ( elements , i + 1 , elements , i , mask - i ) ; elements [ mask ] = elements [ 0 ] ; System . arraycopy ( elements , 1 , elements , 0 , t ) ; tail = ( t - 1 ) & mask ; } return true ; } }
Removes the element at the specified position in the elements array adjusting head and tail as necessary . This can result in motion of elements backwards or forwards in the array .