Controlla se una variabile è uguale a uno qualsiasi dei diversi valori

5

Sto cercando di verificare se un numero intero è uguale a uno qualsiasi dei diversi valori e non voglio farlo:

int d = 0;
if(d == 3 || d == 8 || d == 1) {
    System.out.println("d is one of the special numbers!");
}

Come posso ottenere questo risultato quando si tratta di centinaia o migliaia di valori?

    
posta jay 01.05.2015 - 02:58
fonte

1 risposta

16

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?).

    
risposta data 01.05.2015 - 03:41
fonte

Leggi altre domande sui tag