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

Die erste println wird mir {1=[]} Der zweite bekommt mir []
Ich versuche, zu drucken „Hallo Welt“, aber die if-Anweisung nicht durchmachen.
Ist das leere HashSet [] ungleich null?Wie benutze ich Java leeres HashSet in if-Anweisung?

Wie verwende ich die leere HashSet in dieser If-Anweisung?

+0

Haben Sie keine Tasche ('null') die gleiche wie eine leere Tasche (leer' HashSet')? (Anmerkung: Ich verwende hier die reale Bedeutung von "Tasche", nicht die Datenstruktur.) –

+0

In Java, '==' auf zwei Objekten (dh nicht Primitiven) ** immer ** vergleicht, um zu sehen, ob sie sind Referenzen auf das gleiche Objekt (oder beide sind null). Einige Sprachen haben die Fähigkeit, '== 'in einigen Fällen neu zu definieren, so dass sie den Inhalt vergleicht. Java nicht. (Java verwendet '' equals() 'normalerweise, um Inhalte zu vergleichen, aber das wird Ihnen hier nicht helfen, weil' equals() 'auf einem' HashSet' eine leere Menge nicht als NULL-Referenz betrachtet. Sie hätten definieren können es so, aber sie haben es nicht.) – ajb

Antwort

9

Es gibt einen Unterschied zwischen null, was "nichts" bedeutet, und einem leeren HashSet. Ein leeres HashSet ist ein tatsächliches HashSet, aber eines, das zufälligerweise zufällig keine Elemente darin hat. Dies ist ähnlich wie null ist nicht das gleiche wie die leere Zeichenfolge "", die eine Zeichenfolge ist, die keine Zeichen enthält.

Um zu überprüfen, ob die HashSet leer ist, verwenden Sie die isEmpty Methode:

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

hoffe, das hilft!

3

Ist das leere HashSet, [] nicht gleich null?

Richtig, ist es nicht. Dies ist genau der Grund, warum Ihr Code sich so verhält.

Um zu überprüfen, für beide null und leeren Satz, verwenden das folgende Konstrukt:

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

Die leeren HashSet ist keine null. Fügen Sie einen Test durch den HashSet.size()

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

verwenden oder verwenden HashSet.isEmpty(),

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

Alternativ können Sie auf Kommentar

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

Dann test.get("1") ist null.