Sto cercando un'implementazione java.util.Queue
che accoda una volta gli elementi uguali al massimo.implementazione java.util.Queue che fornisce elementi uguali al massimo una volta
esempio un tale specialQueue
dovrebbe comportarsi in questo modo:
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));
mi si avvicinò con un'implementazione che gestisce un interno Set<E> alreadySeenElements
, e le guardie contro l'aggiunta di elementi a una coda delegato controllando contro quel set. Mi stavo chiedendo se esiste già un'implementazione "collaudata".
Dai un'occhiata qui http://stackoverflow.com/questions/2319086/a-ueue-that-ensure-uniqueness-of-the-elements – Sneh
@Sneh, grazie per avermi fatto conoscere l'altra domanda, che anzi è molto vicino al mio. Le risposte laggiù sembrano essere più focalizzate sull'unicità di un elemento durante quella voce di elementi all'interno della coda, non sull'unicità di un elemento durante la vita della coda. – Abdull
Penso che il requisito di unicità stia rompendo il contratto di coda. Per esempio. Queue.add deve restituire true o lanciare IllegalStateException se non è possibile aggiungere l'elemento a causa di limitazioni di capacità. –