AI作成・AIで再検証済(有資格者監修なし)1Z0-826-JPN 対応
並行処理(ConcurrentHashMap.merge)難易度 標準無料

次のコードの出力として正しいものを選べ。

1  import java.util.*;
2  import java.util.concurrent.*;
3  public class Q10 {
4      public static void main(String[] a) {
5          ConcurrentHashMap<String, Integer> m = new ConcurrentHashMap<>();
6          for (String w : List.of("a", "b", "a", "c", "a", "b"))
7              m.merge(w, 1, Integer::sum);
8          System.out.println(m.get("a") + " " + m.get("b") + " " + m.get("c"));
9      }
10 }
  1. A3 2 1
  2. B1 1 1
  3. CNullPointerException がスローされる
  4. D2 3 1
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・AIで再検証済

解説

map.merge(key, value, remappingFunction) は集計(カウント)の定番で、次のように動く:

  • キーが存在しなければ → value(ここでは 1)をそのまま格納。
  • キーが既に有れば → remappingFunction(既存値, value) の結果で更新(Integer::sum = 既存 + 1)。

出現回数は a×3, b×2, c×1。各キーは初回に 1、以降 +1 されるので a=3, b=2, c=1 → 出力 3 2 1。 ConcurrentHashMap はスレッドセーフで、merge はキー単位でアトミックに実行される。

各誤答が違う理由
  • Bmerge は既存キーに対して remap(既存+1)で更新するので回数が積み上がる。上書きで常に1になるわけではない。
  • Cキー・値とも非 null(値は 1、remap 結果も非null)。ConcurrentHashMap が NPE を投げる条件(null キー/値)に該当しない。
  • D出現回数の取り違え。a は3回・b は2回なので a=3, b=2。
ひっかけ: ConcurrentHashMap は null キー・null 値を許さない(HashMap との重要な違い)。merge の第2引数に null、あるいは remap 結果が null になるとキー削除や NullPointerException の挙動になる点に注意。
実機確認の答え合わせ
出力:
3 2 1
公式ドキュメント・関連ConcurrentHashMap.merge(SE17 API)↗
AIが作成し、別の手順のAIで誤りを点検した解説です(有資格者による監修は経ていません)

有資格者(著者)が監修した問題は、すべて無料サンプルとして公開しています。買う前に、その全部を実際に解いて解説まで読めます。有料で追加される問題はAIが作成したもので、有資格者の監修は入っていません。

この問題集の作り方

  1. 問題と解説はAIが作成しています。有資格者(著者)が監修した問題は、無料サンプルとして公開している分だけです。有料で追加される問題に監修は入っていません。
  2. 各問に、公式ドキュメントの出典リンクを付けています。書いてあることは、出典に当たって確かめられます。
  3. 誤答の選択肢それぞれに、なぜ誤りなのかの理由を書いています。
  4. 解説に載せているコンパイル結果は、実際に javac を走らせた出力です。想定した挙動ではありません。
  5. 誤りを見つけたら報告できます。原則として無償で訂正・削除します。
  6. 各試験の運営団体とは無関係の非公式教材です。合格を保証するものではありません。
この分野をもっと解いて、得点源に
並行処理 を含む問題を分野別に演習できます。
演習する →