このプログラムは、基本的に文字列配列 tst 内の各文字列の出現回数をカウントするもので、教科書で見つけました。
public class Test {
private static HashMap<String, Integer> mp = new HashMap<String, Integer>();
public static void main(String[] args) {
String[] tst = new String[] { "ABC", "DEF", "DEF", "DEF","ABC", "DEF", "ABC" };
checkMap(tst);
}
public static void checkMap(String[] str) {
for (String st : str) {
if (!mp.containsKey(st)) {
mp.put(st, 1);
}
else {
Integer ct = mp.get(st);
if(ct!=null)
{
ct++;
mp.put(st, ct);
}
}
}
for (Map.Entry<String, Integer> entry : mp.entrySet()) {
System.out.println(entry.getKey() + " ocurrs " + entry.getValue()+ " times");
}
}
}
コードの出力は -
ABC ocurrs 3 times
DEF ocurrs 4 times
私の質問は、ここの if/else ステートメントにあります -
if (!mp.containsKey(st)) {
mp.put(st, 1);
}
else {
Integer ct = mp.get(st);
if(ct!=null)
{
ct++;
mp.put(st, ct);
}
}
ハッシュマップ内にエントリを入れていない (ハッシュマップが空である) 場合、これはどのような基準で機能しますか? これが非常に基本的な質問である場合は申し訳ありませんが、これを説明するオンラインのどこにも答えが見つかりませんでした. if/else ループに書かれている内容と混同しています。また、この行はここにあります -
Integer ct = mp.get(st);
ハッシュマップが実際には空である場合、キーがマップされている値を取得するにはどうすればよいでしょうか? これを配列に関連付けようとしています-作成されたが初期化されていない配列の要素をクエリすると、nullポインターがスローされます。誰か、これがハッシュマップでどのように機能するか説明してください。もう一度、このような基本的な質問をして申し訳ありません。