2016-08-01 7 views
-2

以下のコードでは、次の行の意味は?アナグラムコード意味

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

コード(アナグラムを求める):

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

は、「m」が何であるかによって異なります。関数の引数として代入によって混乱している場合は、Javaの代入では '+'と同じように演算子であることに注意してください。その結果、値が割り当てられます。さらに、変数の値を変更する副作用があります。 – Arkadiy

+0

フルコードは[mcve]としてここに入力する必要があります。しかし、あなたはハッシュマップを持っているように見えます。それについて何が分かりませんか? –

+0

Java 8では、これは 'm.computeIfAbsent(alpha、l - > new ArrayList ())です。add(word);' – 4castle

答えて

3

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

割り当てを返すよう

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

も書くことができあなたのコードが動作している理由です。

+0

これはありがたいですが、何が入っているのか知りたいです。空の配列ですか? – hmharsh3

+1

@ user3386952はい、 'l'は現在マップにあるものを含み、マップにない場合は空の' ArrayList'が追加され、 'l'がそれを参照します。 – 4castle

+0

ありがとう@ f1sh今私はそれがどのように動作しているか理解しています – hmharsh3