Ci sono due approcci divergenti a questo basato sulla domanda chiave di "i falsi positivi sono accettabili?" Questo significa "Se voglio testare se 42 è uno dei tuoi numeri speciali, e non è nel tuo numero speciale, è giusto dire" sì "?"
Se lo è, ti ritrovi nel regno del filtro di fioritura . Questo ha il vantaggio che è piccolo, e veloce, e probabilmente andrà bene. Tornerà con una risposta di "possibilmente nel set" o "sicuramente non nel set". I primi correttori ortografici lo usavano per comprimere dizionari enormi fino a pochi kilobyte (non si adattano troppo a un floppy da 140k).
Tuttavia, come sottolineato, di nuovo, si può dire "sì" quando la risposta è "no".
Un approccio più convenzionale è usare un Set
. In Java, questo si trova nell'interfaccia java.util.Set e ci sono un bel po 'di classi di implementazione. Più comunemente usati, HashSet e TreeSet.
Il set contiene, beh, un insieme di valori. Ha un metodo per aggiungerli (e rimuoverli) e testare per vedere se il set contiene un determinato valore (o valori). È davvero una struttura dati piuttosto semplice.
Set<Integer> foo = new HashSet<Integer>();
foo.add(3);
foo.add(8);
foo.add(1);
...
if (foo.contains(d)) { ... }
Non importa quanto sia grande il Set. Che si tratti di tre o tremila (o più) valori. Funziona altrettanto bene.
A tal fine, suggerirei di leggere di più sul Framework delle collezioni Java . Ci sono molte classi lì che hanno un numero di usi. Ti troverai spesso a utilizzare queste classi: elenchi, set e mappe sono i fondamenti di gran parte dei problemi di programmazione. Comprendere quale elenco o set o mappa da usare può essere molto importante nel comportamento (vuoi i risultati quando si itera in ordine di inserimento? Ordine ordinato? Non importa?).