2015-07-15 7 views
10

Sto cercando una struttura dati che si comporta come una coda (potrebbe essere un'implementazione della coda) ma mi consente di ottenere più elementi dalla collezione (esempio: i primi 15 elementi della coda).C'è una raccolta che si comporta come una coda ma mi consente di ottenere più elementi alla volta?

Sarebbe molto bello se non richiedesse nuove dipendenze.

C'è qualcosa del genere?

Più vicino ho avuto durante la mia ricerca era il BlockingQueue con il metodo drainTo(), ma questo non è quello che mi serve.

+0

Vorrei creare il mio metodo che chiama il poll x volte (dato come parametro) e restituisce una nuova Collezione (non so se NimChimpsky suggerisce lo stesso, a causa delle sue modifiche costanti, ma è più o meno la strada da percorrere) – vefthym

+0

Perché pensi di aver bisogno di questo invece di prendere ripetutamente? – chrylis

risposta

8

LinkedList coda di implementazione, raccolta ed elenco.

È possibile poll per la testa oppure ottenere sublist per i primi 15 elementi e quindi anche removeRange per rimuoverli.

Probabilmente scriverò solo 15 volte poiché il sottolista/removeRange avrà comunque bisogno di scorrere gli elementi in qualche modo, quindi la perfromance sarà simile.

+0

Sto ancora pensando a questo o chiamando più volte queue.poll() come suggerito in precedenza. Il vantaggio di queue.poll() è che non ho bisogno di gestire il caso in cui la coda è più piccola della dimensione del batch e che non devo gestire la rimozione manuale degli elementi. Non sono sicuro di quale codice sia migliore. Sto facendo alcuni test prestazionali al momento – JSBach

+0

@JSBach Immagino che la differenza di prestazioni sia trascurabile, guarda la fonte di sublist e removeRange - penso che debba scorrere gli elementi. – NimChimpsky

+0

Ok, bello. In realtà il removeRange è protetto, quindi non posso usarlo. Dovrei chiamare sottolista (...). Clear(). Ad ogni modo, ripeterò il sondaggio 15 volte. Grazie per il tuo aiuto, appena possibile lo contrassegnerò come risposta – JSBach