2016-08-01 17 views
-2

In dem folgenden Code, was bedeutet die folgende Zeile?Anagram Code Bedeutung

m.put(alpha, l=new ArrayList<String>()); 

-Code (für Anagramme zu finden):

try { 
    Scanner s = new Scanner(new File(args[0])); 
    while (s.hasNext()) { 
     String word = s.next(); 
     String alpha = alphabetize(word); 
     List<String> l = m.get(alpha); 
     if (l == null) 
      m.put(alpha, l=new ArrayList<String>()); 
     l.add(word); 
    } 
} catch (IOException e) { 
    System.err.println(e); 
    System.exit(1); 
} 
+1

hängt davon ab, was 'm' ist. Wenn Sie von der Zuweisung als Funktionsargument verwirrt sind, denken Sie daran, dass in der Java-Zuweisung ein Operator ist, genau wie '+'. Sein Ergebnis ist der Wert, der zugewiesen wird, und es hat einen Nebeneffekt, den Wert der Variablen zu ändern. – Arkadiy

+0

Ihr vollständiger Code muss hier als [mcve] angegeben werden. Sieht aber so aus, als hättest du eine Hashmap. Was ist daran nicht zu verstehen? –

+0

In Java 8 wäre das 'm.computeIfAbsent (alpha, l -> neue ArrayList ()). Add (Wort);' – 4castle

Antwort

3

Der Teil

m.put(alpha, l=new ArrayList<String>()); 

auch als

l=new ArrayList<String>(); 
m.put(alpha, l); 

Eine Zuordnung der geschrieben werden konnte zurück zugewiesener Wert, weshalb Ihr Code funktioniert.

+0

ok danke dafür, aber ich möchte wissen, was ich enthalten werde, Wert von l ist leeres Array? – hmharsh3

+1

@ user3386952 Ja, 'l' enthält, was gerade in der Map ist, und wenn es nicht in der Map ist, wird eine leere' ArrayList' hinzugefügt und 'l' wird darauf verweisen. – 4castle

+0

danke @ f1sh jetzt verstehe ich, wie es funktioniert – hmharsh3