Come evitare o minimizzare l'uso dell'istruzione check / condizionale nel mio scenario?

1

Ho uno scenario, dove ho ottenuto lo streaming e ho bisogno di verificare un certo valore. Se ho qualche nuovo valore, devo memorizzarlo in qualsiasi struttura dati.

Sembra molto facile, posso posizionare un'istruzione condizionale se-else o può usare contenere il metodo di set / map per controllare che sia ricevuto sia nuovo o meno.

Ma il problema è che il controllo influirà sulle prestazioni della mia applicazione, in streaming ne riceverò centinaia per il valore in secondi, se comincio a controllare ogni singolo valore che ho ricevuto, di sicuro ha effetto sulle prestazioni.

Chiunque può suggerirmi un meccanismo o un algoritmo per risolvere il mio problema, ignorando i controlli o almeno minimizzandoli?

    
posta Muneeb Nasir 19.08.2014 - 11:50
fonte

2 risposte

4

Utilizza un HashSet che non aggiungerà un elemento se è già lì, la sua implementazione contains() è ottimizzata abbastanza bene purché tu disponga di un'implementazione decente di hashCode.

    
risposta data 19.08.2014 - 14:21
fonte
1

La probabilità è che l'uso di una chiave con hash per la struttura dei dati sia abbastanza veloce. Il calcolo di una funzione di hash è in genere solo alcune righe di codice e la ricerca di una chiave con hash è solo un'altra. Mi azzardo a pensare che un'implementazione Java ben scritta possa gestire qualcosa di più di 1 milione di valori al secondo su hardware desktop tipico.

Quindi scrivi un'implementazione ingenua usando una comoda ricerca hash (dizionario / mappa), prestando attenzione alla funzione di hashing. Quindi confrontalo. Probabilmente sarà abbastanza veloce, e se non hai molte opzioni per accelerarlo. Una volta superato i 10 milioni al secondo, avrai un problema interessante, ma questa è una domanda diversa.

    
risposta data 20.08.2014 - 04:55
fonte

Leggi altre domande sui tag