前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >HashMap 和 Hashtable 的区别

HashMap 和 Hashtable 的区别

原创
作者头像
代码小李
发布2025-01-30 18:40:05
发布2025-01-30 18:40:05
470
举报

HashMapHashtable 都是 Java 中用于存储键值对的集合类,但它们之间存在一些重要的区别。以下是它们的主要区别:

  1. 线程安全性
    • HashMap 是非线程安全的,这意味着在多线程环境下使用 HashMap 可能会导致数据不一致的问题。
    • Hashtable 是线程安全的,所有的方法都进行了同步处理,因此在多线程环境下可以安全使用。
  2. 性能
    • 由于 HashMap 不进行同步处理,所以在单线程环境下性能更好。
    • Hashtable 由于所有方法都进行了同步处理,所以在多线程环境下性能较差。
  3. 允许 null 值
    • HashMap 允许一个 null 键和多个 null 值。
    • Hashtable 不允许 null 键和 null 值,如果尝试插入 null 键或 null 值,会抛出 NullPointerException
  4. 迭代器
    • HashMap 返回的迭代器是 fail-fast 的,这意味着如果在迭代过程中集合被修改(除了迭代器自身的 remove 方法),迭代器会抛出 ConcurrentModificationException
    • Hashtable 返回的枚举器(Enumeration)也是 fail-fast 的,但在早期版本的 Java 中可能不是这样。
  5. 继承关系
    • HashMap 实现了 Map 接口。
    • Hashtable 实现了 Dictionary 接口,这是一个过时的接口。
  6. 初始容量和负载因子
    • HashMap 的默认初始容量是 16,负载因子是 0.75。
    • Hashtable 的默认初始容量是 11,负载因子是 0.75。
  7. 构造函数
    • HashMap 提供了多种构造函数,包括指定初始容量和负载因子的构造函数。
    • Hashtable 也提供了类似的构造函数,但不如 HashMap 灵活。

示例代码

代码语言:java
复制
import java.util.HashMap;
import java.util.Hashtable;

public class HashMapVsHashtable {
    public static void main(String[] args) {
        // 创建 HashMap
        HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put("key1", "value1");
        hashMap.put("key2", "value2");
        hashMap.put(null, "value3"); // 允许 null 键
        hashMap.put("key4", null); // 允许 null 值

        // 创建 Hashtable
        Hashtable<String, String> hashtable = new Hashtable<>();
        hashtable.put("key1", "value1");
        hashtable.put("key2", "value2");
        // hashtable.put(null, "value3"); // 抛出 NullPointerException
        // hashtable.put("key4", null); // 抛出 NullPointerException

        System.out.println("HashMap: " + hashMap);
        System.out.println("Hashtable: " + hashtable);
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 示例代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档