diff --git a/src/main/java/me/brianlong/git/UniquePriorityFifoQueue.java b/src/main/java/me/brianlong/git/UniquePriorityFifoQueue.java index 8b72f5f..5cb4981 100644 --- a/src/main/java/me/brianlong/git/UniquePriorityFifoQueue.java +++ b/src/main/java/me/brianlong/git/UniquePriorityFifoQueue.java @@ -15,6 +15,7 @@ public class UniquePriorityFifoQueue implements Queue { private final Counter counter = new SimpleCounter(); private final Counter fakeCounter = new FakeCounter(); private final TreeSet> elements; + // TreeSet does not check for uniqueness using hashCode, but using the comparator instead private final Set> uelements; public UniquePriorityFifoQueue() { @@ -24,11 +25,7 @@ public class UniquePriorityFifoQueue implements Queue { public UniquePriorityFifoQueue(Collection c) { this(); - for (T e : c) { - PriorityFifoElement element = new PriorityFifoElement(e, this.counter); - this.elements.add(element); - this.uelements.add(element); - } + this.addAll(c); } public UniquePriorityFifoQueue(final Comparator comparator) { @@ -46,18 +43,19 @@ public class UniquePriorityFifoQueue implements Queue { @Override public boolean add(T e) { PriorityFifoElement element = new PriorityFifoElement(e, this.counter); - return this.elements.add(element) && this.uelements.add(element); + return this.uelements.add(element) && this.elements.add(element); } @Override public boolean addAll(Collection c) { + boolean anyAdded = false; if (c != null) for (T e : c) { PriorityFifoElement element = new PriorityFifoElement(e, this.counter); - this.elements.add(element); - this.uelements.add(element); + if (this.uelements.add(element) && this.elements.add(element)) + anyAdded = true; } - return true; + return anyAdded; } @Override @@ -117,8 +115,7 @@ public class UniquePriorityFifoQueue implements Queue { @Override public boolean offer(T e) { - PriorityFifoElement element = new PriorityFifoElement(e, this.counter); - return this.elements.add(element) && this.uelements.add(element); + return this.add(e); } @Override