hashtable和hashmap的key和value可以为null吗?
1 个回答
珍惜所有的不期而遇,看淡所有的不辞而别。冰雪女皇在 **Key / Value 是否允许 `null`** 这一点上,`HashMap` 和 `Hashtable` 差别非常明显: ## 1. **HashMap** * **Key** * 允许 **1 个** `null` 作为键。 * 再放入 `null` key 会覆盖之前的值(因为 key 唯一)。 * **Value** * 允许 **多个** `null` 作为值。 **示例:** ```java Map<String, String> map = new HashMap<>(); map.put(null, "A"); // ✅ key 可以为 null map.put("B", null); // ✅ value 可以为 null map.put(null, "C"); // ✅ 覆盖前一个 null key System.out.println(map); // {null=C, B=null} ``` ## 2. **Hashtable** * **Key** * **不允许** `null`,否则抛 `NullPointerException`。 * **Value** * **不允许** `null`,否则抛 `NullPointerException`。 **示例:** ```java Map<String, String> table = new Hashtable<>(); table.put(null, "A"); // ❌ NullPointerException table.put("B", null); // ❌ NullPointerException ``` ## 3. **原因** * **HashMap** * 在 `put` 时对 `null` key 做了特殊处理:直接放在 `table[0]` 位置,不参与 hash 计算。 * `null` value 直接存,没有限制。 * **Hashtable** * 老版本设计(JDK1.0 时代),直接调用 `key.hashCode()` 和 `value.hashCode()`,如果是 `null` 就会抛 NPE; * 而且它的设计理念是**不接受 null**,避免潜在的歧义(比如 `get()` 返回 `null` 时是 key 不存在还是 value 为空)。 ### 总结表 | Map 实现 | Key 为 null | Value 为 null | | ------------- | ---------- | ------------ | | **HashMap** | 允许 1 个 | 允许多个 | | **Hashtable** | 不允许 | 不允许 |发布于 2025-08-13 06:47 •IP属地 广东举报评论收藏
公众号进入网站体验更佳

