0

0

详解Dictionary抽象类与Map接口_Java集合框架的历史演进说明

P粉602998670

P粉602998670

发布时间:2026-02-23 18:39:09

|

565人浏览过

|

来源于php中文网

原创

dictionary 是 java 1.0 的过时抽象类,jdk 1.2 起被 @deprecated,由泛型 map 接口取代;其子类 hashtable 和 properties 也已被 hashmap、concurrenthashmap 等现代实现替代,开发中应统一使用 map。

详解dictionary抽象类与map接口_java集合框架的历史演进说明

Dictionary 是 Java 1.0 的遗留抽象类,早已被 Map 接口取代

Java 中的 Dictionary 是个过时的抽象类,从 JDK 1.0 就存在,但它在 JDK 1.2(1998 年)引入集合框架时就被明确标记为 @Deprecated,官方建议彻底停用。它只留下 HashtableProperties 两个子类,而这两个类本身也早被更现代的替代方案覆盖。

你几乎不会在新项目里主动写 new Dictionary()——因为它不能实例化;也不会去继承它——因为所有标准实现都已转向 Map 接口。它的方法签名也暴露了设计陈旧:比如 get(Object key) 返回 Object,没有泛型,不支持 null key/value(Hashtable 子类直接抛 NullPointerException),也没有集合视图(如 keySet()entrySet())。

Map 接口是实际开发中唯一该用的键值对契约

Map 是一个泛型接口,定义了现代键值映射的标准行为,所有主流实现(HashMapTreeMapLinkedHashMapConcurrentHashMap)都直接实现它,而非继承 Dictionary。它的设计更严谨、扩展性更强:

  • Map 明确区分了 key 不可重复、value 可重复的语义
  • 提供三种集合视图:keySet()values()entrySet(),便于遍历和转换
  • 支持泛型,编译期就能约束 KV 类型,避免运行时 ClassCastException
  • 允许 null key(HashMap)或禁止(ConcurrentHashMap),行为由具体实现决定,而非父类一刀切

示例对比:

立即学习Java免费学习笔记(深入)”;

腾讯智影-AI数字人
腾讯智影-AI数字人

基于AI数字人能力,实现7*24小时AI数字人直播带货,低成本实现直播业务快速增增,全天智能在线直播

下载
Map<String, Integer> map = new HashMap<>(); // ✅ 推荐,类型安全,API 丰富
map.put("a", 1);
Integer v = map.get("a"); // 编译期知道返回 Integer

// ❌ 不要再写(即使能编译)
// Dictionary dict = new Hashtable(); // 警告:Dictionary 已废弃
// Object o = dict.get("a"); // 返回 Object,需强制转型,且无泛型保障

为什么还有人看到 Dictionary?基本只出现在三类地方

现实中遇到 Dictionary,大概率不是你主动选的,而是被动踩坑:

  • 老系统维护:JDK 1.1–1.4 时代写的代码,尤其是早期 Servlet 容器或 RMI 相关逻辑中残留的 Properties(它继承自 Hashtable,而 Hashtable 继承自 Dictionary
  • 反编译/IDE 提示干扰:某些老旧 jar 包字节码未更新,IDE 在跳转时显示 Dictionary 父类声明,但实际调用仍是 Map 方法
  • 误读文档或面试题:部分中文资料把 “dictionary” 当作通用概念(如 Python 的 dict),混同于 Java 的 Map,造成术语混淆

注意:Properties 虽然继承链含 Dictionary,但它自己重写了关键方法(如 load()store()),日常用它读配置文件完全没问题——但别把它当 Dictionary 来扩展,应视作专用于字符串键值的 Map<string string></string> 特化工具。

迁移到 Map 时最容易忽略的兼容性细节

把老代码里的 Hashtable 换成 HashMap 看似简单,但有几个点不留意就会出错:

  • Hashtable 是线程安全的(方法全加 synchronized),HashMap 不是——如果原逻辑依赖其内置同步,直接替换会引发并发问题;应改用 ConcurrentHashMap 或外层加锁
  • Hashtable 不允许 null key 或 value,HashMap 允许一个 null key 和任意数量 null value;若旧代码隐式依赖非空校验,替换后可能触发 NullPointerException
  • PropertiesgetProperty(String key) 返回 String,而 Map.get(Object key) 返回泛型 V;若原逻辑靠 getProperty 做空判断(它返回 null 表示不存在),换成 get() 后需确认是否真没这个 key,还是值就是 null

真正需要“历史演进说明”的场景,往往不是学理论,而是修 bug——看到堆栈里冒出来 java.util.Dictionary,第一反应不该是查源码,而是翻 Git 历史,看这行代码是不是 2003 年写的。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
servlet生命周期
servlet生命周期

Servlet生命周期是指Servlet从创建到销毁的整个过程。本专题为大家提供servlet生命周期的各类文章,大家可以免费体验。

388

2023.08.08

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

830

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

246

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

846

2024.03.01

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

246

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

846

2024.03.01

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

246

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

846

2024.03.01

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1127

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.8万人学习

C# 教程
C# 教程

共94课时 | 10.1万人学习

Java 教程
Java 教程

共578课时 | 71万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号