diff --git a/src/main/java/teetime/util/list/CommittableResizableArrayQueue.java b/src/main/java/teetime/util/list/CommittableResizableArrayQueue.java index 987552ad6b43dd3f9199dbbc55b014ae6f2ab780..33a78aa4ef7fece974eceded10b07c951116f4dd 100644 --- a/src/main/java/teetime/util/list/CommittableResizableArrayQueue.java +++ b/src/main/java/teetime/util/list/CommittableResizableArrayQueue.java @@ -2,6 +2,8 @@ package teetime.util.list; public class CommittableResizableArrayQueue<T> implements CommittableQueue<T> { + private final int MIN_CAPACITY; + private final ArrayPool<T> arrayPool; private T[] elements; @@ -11,6 +13,7 @@ public class CommittableResizableArrayQueue<T> implements CommittableQueue<T> { public CommittableResizableArrayQueue(final Object emptyObject, final int initialCapacity) { super(); this.arrayPool = new ArrayPool<T>(); + this.MIN_CAPACITY = initialCapacity; this.elements = this.arrayPool.acquire(initialCapacity); this.elements[0] = (T) emptyObject; // optimization: avoids the use of an index out-of-bounds check @@ -33,7 +36,7 @@ public class CommittableResizableArrayQueue<T> implements CommittableQueue<T> { @Override public T removeFromHeadUncommitted() { - if (this.lastFreeIndexUncommitted < this.capacity() / 2) { + if (this.capacity() > this.MIN_CAPACITY && this.lastFreeIndexUncommitted < this.capacity() / 2) { this.shrink(); } T element = this.get(--this.lastFreeIndexUncommitted); @@ -73,12 +76,14 @@ public class CommittableResizableArrayQueue<T> implements CommittableQueue<T> { } private void grow() { - T[] newElements = this.arrayPool.acquire(this.capacity() * 2); + T[] newElements = this.arrayPool.acquire(this.elements.length * 2); + // System.out.println("grow: " + this.lastFreeIndexUncommitted); this.replaceCurrentArrayBy(newElements); } private void shrink() { - T[] newElements = this.arrayPool.acquire(this.capacity() / 2); + T[] newElements = this.arrayPool.acquire(this.elements.length / 2); + // System.out.println("shrink: " + this.lastFreeIndexUncommitted); this.replaceCurrentArrayBy(newElements); }