2014-09-15 11 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"); 
    } 
} 

Pierwszy println dostaje mi {1=[]} Drugi dostaje mi []
Próbuję wydrukować „Hello World”, ale jeśli oświadczenie nie przeżywa.
Czy pusty HashSet, [] nie jest równy null?Jak używać pustego HashSet java w instrukcji if?

Jak używać pustego HashSet w tej instrukcji if?

+0

Czy nie ma torby ("null") tak samo jak pustej torby (puste 'HashSet')? (Uwaga: Używam tutaj rzeczywistego znaczenia "torby", a nie struktury danych.) –

+0

W Javie '== 'na dwóch obiektach (tj. Nie na elementach pierwotnych) ** zawsze ** porównuje, czy są są odniesieniami do tego samego obiektu (lub oba są zerowe). Niektóre języki mają możliwość przedefiniowania '==' w niektórych przypadkach, aby porównać zawartość. Java nie. (Java zwykle używa 'equals()' do porównywania zawartości, ale to ci nie pomoże, ponieważ 'equals()' na 'HashSet' nie uważa pustego zestawu za równy referencji zerowej. tak, ale tak się nie stało.) – ajb

Odpowiedz

9

Istnieje różnica między null, co oznacza "nic w ogóle" i pustą HashSet. Pusty HashSet jest rzeczywisty HashSet, ale przypadkowo akurat nie ma w nim żadnych elementów. Jest to podobne do tego, jak null nie jest tym samym, co pusty ciąg znaków "", który jest łańcuchem bez żadnych znaków.

Aby sprawdzić, czy HashSet jest pusty, należy użyć metody isEmpty:

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

nadzieję, że to pomaga!

3

Czy pusty HashSet, [] nie równa null?

Prawidłowo, nie jest. Właśnie z tego powodu twój kod zachowuje się tak jak on.

Aby sprawdzić zarówno null i zbioru pustego, należy stosować następujące konstrukt:

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

Pusty HashSet nie jest null. Dodaj test za pomocą HashSet.size()

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

lub użyj HashSet.isEmpty(),

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

Alternatywnie, można wypowiedzieć się

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

Następnie test.get("1") jest zerowy.

Powiązane problemy