了解です。以下のようにコードにコメントを追加して説明します。
// Itemクラスの定義。idとnameの2つのプライベートフィールドを持つ。
public class Item {
private int id;
private String name;
// コンストラクタ。Itemオブジェクトが作成されるときにidとnameが設定される。
public Item(int id, String name) {
this.id = id;
this.name = name;
}
// idフィールドのゲッターメソッド。
public int getId() {
return id;
}
// nameフィールドのゲッターメソッド。
public String getName() {
return name;
}
}
// メインクラスSampleの定義。
public class Sample {
// mainメソッド。プログラム実行のエントリーポイント。
public static void main(String[] args) {
// Integerをキーとし、Itemオブジェクトを値とするHashMapを生成。
Map<Integer, Item> map = new HashMap<Integer, Item>();
// mapにキー1でItemオブジェクトを追加。初めての追加なのでサイズは増える。
map.put(1, new Item(1, "A"));
// mapにキー2でItemオブジェクトを追加。新しいキーなのでサイズは増える。
map.put(2, new Item(2, "B"));
// mapにキー3でItemオブジェクトを追加。新しいキーなのでサイズは増える。
map.put(3, new Item(3, "C"));
// mapにキー1でItemオブジェクトを追加。既にキー1は存在するため値が更新されるがサイズは増えない。
map.put(1, new Item(1, "A"));
// mapにnullキーでItemオブジェクトを追加。nullキーも許容されるためサイズは増える。
map.put(null, new Item(0, "default"));
// マップの現在のサイズを出力。結果は「4」。キー1は重複していて1回しか数えられず、nullキーが加わる。
System.out.println(map.size());
}
}
コメントは各行の操作を明確に説明しています。この説明から、map
の最終的なサイズが 4
である理由がわかります。キー 1
が2回使用されているが、ハッシュマップは重複したキーを許可しないため、新しい Item
オブジェクトで古いものを上書きしています。他のキー 2
、3
、および null
はそれぞれ独自のエントリを持っており、合計で4つのユニークなキーがあります。