@@ -60,7 +60,7 @@ public T poll() {
60
60
}
61
61
62
62
int shrinkSize = (size + (size <<1 ));
63
- if (size >= MINIMUM_SIZE && (array .length > shrinkSize )) {
63
+ if (shrinkSize >= MINIMUM_SIZE && (array .length > shrinkSize )) {
64
64
array = Arrays .copyOfRange (array , firstIndex , lastIndex );
65
65
lastIndex = size ;
66
66
firstIndex = 0 ;
@@ -90,18 +90,25 @@ public boolean remove(T value) {
90
90
}
91
91
92
92
private boolean remove (int index ) {
93
- int size = size () ;
94
- if (index < 0 || index >= size ) return false ;
93
+ if ( index < 0 || index >= array . length ) return false ;
94
+ if (index == firstIndex ) return ( poll ()!= null ) ;
95
95
96
- int adjIndex = firstIndex +index ;
97
- if (adjIndex != --size ) {
96
+ int adjIndex = index %array .length ;
97
+ int adjLastIndex = (lastIndex -1 )%array .length ;
98
+ if (adjIndex != adjLastIndex ) {
98
99
// Shift the array down one spot
99
- System .arraycopy (array , adjIndex + 1 , array , adjIndex , (array .length - (adjIndex +1 )));
100
+ System .arraycopy (array , index +1 , array , index , (array .length - (index +1 )));
101
+ if (adjLastIndex <firstIndex ) {
102
+ //Wrapped around array
103
+ array [array .length -1 ] = array [0 ];
104
+ System .arraycopy (array , 1 , array , 0 , firstIndex -1 );
105
+ }
100
106
}
101
- array [size ] = null ;
107
+ array [adjLastIndex ] = null ;
102
108
109
+ int size = size ();
103
110
int shrinkSize = (size + (size <<1 ));
104
- if (size >= MINIMUM_SIZE && (array .length > shrinkSize )) {
111
+ if (shrinkSize >= MINIMUM_SIZE && (array .length > shrinkSize )) {
105
112
System .arraycopy (array , 0 , array , 0 , shrinkSize );
106
113
}
107
114
0 commit comments