博客
关于我
Java : 类集框架 (Map 接口概述) (HashMap + Hashtable)
阅读量:91 次
发布时间:2019-02-26

本文共 1803 字,大约阅读时间需要 6 分钟。

Map 接口及 HashMap 与 Hashtable 比较

Map 接口概述

Map 是 Java 中一个核心的接口,用于实现键值对的存储与管理。与 Collection 类不同,Map 的特点在于一次性存储两对象的关系:key 和 value。通过 key 可以快速定位并获取对应的 value,这种结构在实际应用中具有重要意义。


Map 接口常用方法

Map 接口提供了多种核心方法,主要包括以下几种:

  • put(K key, V value)

    • 方法特性:普通
    • 描述:将 key-value 对加入 Map 中。
  • get(Object key)

    • 方法特性:普通
    • 描述:根据 key 获取对应的 value,若无找到则返回 null。
  • keySet()

    • 方法特性:普通
    • 描述:返回所有 key 的集合,keySet 是不可重复的集合。
  • values()

    • 方法特性:普通
    • 描述:返回所有 value 的集合,values 可能包含重复元素。
  • entrySet()

    • 方法特性:普通
    • 描述:返回 Map 中所有 key-value 对的集合,每个元素都是 Map.Entry 类型。

  • Map 的实现类

    Map 本身是接口,具体实现类需要通过子类实现。常用的子类包括:

  • HashMap:最常用的 Map 实现类,无序,性能优异。
  • Hashtable:早期的 Map 实现类,具有线程安全性,但性能相对较低。
  • TreeMap:基于红黑树实现的 Map,支持键值对的排序。
  • ConcurrentHashMap:线程安全的 Map 实现类,性能优于 Hashtable。

  • HashMap 的实现原理

    HashMap 是基于哈希的原理实现的,其核心思想是使用 hash 函数将 key 转换为整数位置,快速定位存储位置。当数据量较小时,HashMap 采用链表存储;当数据量较大时,链表被替换为红黑树以减少查找时间。这种机制使得 HashMap 在数据量大的情况下仍能保持较高的查询效率。


    Hashtable 的特点及用途

    Hashtable 是 Java 的早期 Map 实现类,具有以下特点:

  • 线程安全:支持多线程环境下的安全操作。
  • 不允许 null:key 和 value 都不能为 null,否则会抛出 NullPointerException。
  • 同步机制:内部使用 synchronized 关键字实现同步。
  • 虽然 Hashtable 在早期具有重要地位,但在性能和灵活性方面不如 HashMap,因此在大多数场景下,开发者更倾向于使用 HashMap。


    HashMap 与 Hashtable 的区别

    特性 HashMap Hashtable
    推出版本 JDK 1.2 JDK 1.0
    性能 异步处理,性能较高 同步处理,性能较低
    安全性 线程非安全 线程安全
    存储 null 允许存储 null key 和 value 都不允许为 null

    使用 HashMap 的优化

  • 默认容量:HashMap 的默认容量为 16 或 2^N,其中 N 是最小的 power of 2 大于等于初始数组大小。
  • 负载因子:默认负载因子为 0.75,当存储数量达到负载因子时,进行扩容操作。
  • 计算方式:计算 hash 值时,采用 XOR (^) 运算符和位移操作(<<)来混合 key 和 value,以减少冲突概率。

  • 面试题解答

    Q:请解释 HashMap 的工作原理。

    A:HashMap 基于哈希表(数组+链表/红黑树)存储数据。首先,key 经过 hash 函数计算得到一个整数位置,将 value 存储在对应的链表或红黑树节点中。当链表长度超过 8 时,链表会被替换为红黑树,以减少查找时间。

    Q:HashMap 与 Hashtable 有什么区别?

    A:主要区别在于线程安全性和 null 的存储能力。Hashtable 是线程安全的,但性能较低;HashMap 是非线程安全的,但允许存储 null。


    总结

    Map 是 Java 中实现键值对存储的核心接口,其常用实现类包括 HashMap 和 Hashtable。HashMap 因其性能优异和灵活性,成为大多数场景下的首选,而 Hashtable 则在需要线程安全的环境下仍具有其用途。理解 Map 的实现原理和使用场景,是掌握 Java 集合框架的关键。

    转载地址:http://boyk.baihongyu.com/

    你可能感兴趣的文章
    NPOI
    查看>>
    NPOI之Excel——合并单元格、设置样式、输入公式
    查看>>
    NPOI初级教程
    查看>>
    NPOI利用多任务模式分批写入多个Excel
    查看>>
    NPOI在Excel中插入图片
    查看>>
    NPOI将某个程序段耗时插入Excel
    查看>>
    NPOI格式设置
    查看>>
    NPOI设置单元格格式
    查看>>
    Npp删除选中行的Macro录制方式
    查看>>
    NR,NF,FNR
    查看>>
    nrf24l01+arduino
    查看>>
    nrf开发笔记一开发软件
    查看>>
    nrm —— 快速切换 NPM 源 (附带测速功能)
    查看>>
    nrm报错 [ERR_INVALID_ARG_TYPE]
    查看>>
    NS3 IP首部校验和
    查看>>
    NSDateFormatter的替代方法
    查看>>
    NSError 的使用方法
    查看>>
    NSGA-Ⅲ源代码
    查看>>
    nsis 安装脚本示例(转)
    查看>>
    NSJSON的用法(oc系统自带的解析方法)
    查看>>