2014-09-15 18 views
5
public static void main(String[] args) { 
    Map<String, HashSet<String>> test = new HashMap<String, HashSet<String>>(); 

    test.put("1", new HashSet<String>()); 
    System.out.println(test); 

    System.out.println(test.get("1")); 

    if(test.get("1") == null){ 
     System.out.println("Hello world"); 
    } 
} 

Il primo println mi {1=[]} ottiene il secondo mi viene []
che sto cercando di stampare "Ciao mondo", ma l'istruzione if non sta attraversando.
L'Hashset vuoto, [] non è uguale a null?Come utilizzare HashSet java vuoto nell'istruzione if?

Come utilizzare l'HashSet vuoto in questa istruzione if?

+0

Non si dispone di un sacchetto ('null') uguale a quello di un sacchetto vuoto (' Hashset 'vuoto)? (Nota: sto usando il significato del mondo reale di "borsa" qui, non la struttura dati.) –

+0

In Java, '==' su due oggetti (cioè non primitivi) ** sempre ** confronta per vedere se sono riferimenti allo stesso oggetto (o entrambi sono nulli). Alcune lingue hanno la possibilità di ridefinire '==' in alcuni casi in modo tale che possa confrontare i contenuti. Java no. (Java normalmente usa 'equals()' per confrontare i contenuti, ma questo non ti aiuterà qui perché 'equals()' su un 'HashSet' non considera un set vuoto uguale a un riferimento nullo. in quel modo, ma non lo fecero.) – ajb

risposta

9

C'è una differenza tra null, che significa "niente affatto" e uno HashSet vuoto. Un vuoto HashSet è un vero HashSet, ma uno che per coincidenza non ha alcun elemento in esso. Questo è simile al modo in cui null non è uguale alla stringa vuota "", che è una stringa che non contiene caratteri.

per verificare se la HashSet è vuota, utilizzare il metodo isEmpty:

if(test.get("1").isEmpty()){ 
    System.out.println("Hello world"); 
} 

Spero che questo aiuti!

3

È il vuoto HashSet, [] non uguale a null?

Corretto, non lo è. Questo è esattamente il motivo per cui il tuo codice si comporta come fa.

Per controllare sia null e insieme vuoto, utilizzare il seguente costrutto:

HashSet<String> set = test.get("1"); 
if (set == null || set.isEmpty()) { 
    ... 
} 
0

Il vuoto HashSet non è un null. Aggiungere un test utilizzando la HashSet.size()

if (test.get("1") == null || test.get("1").size() == 0) { 

o utilizzare HashSet.isEmpty(),

if (test.get("1") == null || test.get("1").isEmpty()) { 

In alternativa, si potrebbe commentare fuori

// test.put("1", new HashSet<String>()); 
System.out.println(test); 

Poi test.get("1") è nulla.