我正在尋找一個java.util.Queue
實現,該元素最多排隊一次相等的元素。java.util.Queue實現至多提供了相同的元素一次
例如,這樣的specialQueue
的行爲應該像這樣:
E e1;
E e2;
E e3;
//...
assertThat(e1, is(e2));
assertThat(e1, is(not(e3)));
Queue<E> specialQueue;
//...
specialQueue.offer(e1);
specialQueue.offer(e2);
specialQueue.offer(e3);
assertThat(specialQueue.poll(), is(e1));
assertThat(specialQueue.poll(), is(e3));
assertThat(specialQueue.poll(), is(null));
// FIFO semantics are not relevant to the question
specialQueue.offer(e3)
assertThat(specialQueue.poll(), is(null));
我想出了管理內部Set<E> alreadySeenElements
的實現,守衛免受針對該組檢查將元素添加到一個委託隊列。我想知道是否已經存在「經過測試」的實施。
看看這裏http://stackoverflow.com/questions/2319086/a-queue-that-ensure-uniqueness-of-the-elements – Sneh
@Sneh,謝謝你讓我意識到另一個問題,它的確非常接近我的。那裏的答案似乎更多地關注隊列中元素輸入期間元素的唯一性,而不是隊列生命週期中元素的唯一性。 – Abdull
我認爲唯一性要求是打破隊列合同。例如。如果由於容量限制而無法添加元素,Queue.add必須返回true或拋出IllegalStateException。 –