摘要:从源码、特性和算法实现等几个角度归纳HashMap和Hashtable的区别和联系。

  HashMap与Hashtable的区别是面试中经常遇到的一个问题。此问题看似简单,但如若深挖,也可以学习到很多底层知识。本文对两者从源码、特性和算法实现等几个角度进行归纳总结,力争多角度、全方位的立体式展示二者的区别和联系,帮助各位应聘者在面试时飙车不飘车,把面试官摁在地上摩擦。

  相同点

  • 都是以key-value键值对的形式存储数据;
  • 都实现了Serializable接口,故支持序列化;
  • 都实现了Cloneable接口,故能被克隆;
  • 都实现了Map接口。

  各自实现的接口如下图所示:

  不同点比较多,归纳为以下几点:

  对Null key 和Null value的支持不同。HashMap允许Key-value为null,Hashtable不允许;

  hash值算法不同。HashMap添加元素时,是使用自定义的哈希算法,而Hashtable直接采用key的hashCode();

  底层数据结构不同。HashMap 自jdk8开始,底层数据结构采用数组+链表+红黑树,而Hashtable采用数组+链表;

  线程安全性不一样。HashMap没有考虑同步,是线程不安全的。Hashtable是线程安全的,给api套上了一层synchronized修饰;

  虽然HashMap不是线程安全的,但是它的效率会好于Hashtable。这样别出心裁的设计是合理的,在日常应用中,大部分场景是单线程操作的。HashMap把这部分操作解放出来了。

  初始容量和扩容方式不一样。HashMap默认的初试容量大小是16;扩容时,每次将容量变为“原始容量x2”。Hashtable默认的容量大小是11;扩容时,每次将容量变为“原始容量x2 + 1”;

  另外,无论我们指定的容量为多少,构造方法都会将HashMap实际容量设为不小于指定容量的2的次方的一个数,且最大容量不能超过2的30次方。

  继承的父类不同。HashMap继承于AbstractMap类,Hashtable继承自Dictionary类;不过,Dictionary类是一个已经被废弃的类,父类都被废弃,自然而然也没人用它的子类Hashtable了。

  对外提供的接口不同。Hashtable比HashMap多提供了elments() 和contains() 两个方法。

  迭代器(Iterator)不同。HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException。

面试题:HashMap和Hashtable的区别和联系的更多相关文章

  1. 面试题·HashMap和Hashtable的区别(转载再整理)

    原文链接: Javarevisited 翻译: ImportNew.com- 唐小娟 译文链接: http://www.importnew.com/7010.html HashMap和Hashtabl ...

  2. java面试题——HashMap和Hashtable 的区别

    一.HashMap 和Hashtable 的区别 我们先看2个类的定义 public class Hashtable extends Dictionary implements Map, Clonea ...

  3. Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

  4. 一天十道Java面试题----第二天(HashMap和hashTable的区别--------》sleep、wait、join)

    这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 11.HashMap和HashTable的区别及底层实现 12.ConcurrentHashMap原理简述,jdk7和jd ...

  5. HashMap和Hashtable的区别--List,Set,Map等接口是否都继承自Map接口--Collection和Collections的区别

    面试题: 1.HashMap和Hashtable的区别? HashMap:线程不安全,效率高,键和值都允许null值 Hashtable:线程安全,效率低,键和值都不允许null值 ArrayList ...

  6. HashMap和Hashtable的区别(转载)

    转载声明:转载自原文http://www.importnew.com/7010.html HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是 ...

  7. HashMap与HashTable的区别?

    HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题.HashMap的工作原理.ArrayList与Vect ...

  8. Map集合及与Collection的区别、HashMap和HashTable的区别、Collections、

    特点:将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值. Map集合和Collection集合的区别 Map集合:成对出现 (情侣)                       ...

  9. hashMap和hashTable的区别

    每日总结,每天进步一点点 hashMap和hashTable的区别 1.父类:hashMap=>AbstractMap hashTable=>Dictionary 2.性能:hashMap ...

  10. java分享第七天-01(Hashmap和Hashtable的区别&Property)

    一.Hashmap和Hashtable的区别 1 主要:Hashtable线程安全,同步,效率相对低下 HashMap线程不安全,非同步,效率相对高 2 父类:Hashtable是Dictionary ...

随机推荐

  1. 「一」nginx介绍

    应用场景 静态资源(js.css.图片 ) 反向代理 缓存加速(动态资源),比如社区活跃度排名 负载均衡(动态扩容.容灾) API服务 一个请求先经过nginx,再到应用服务器,访问数据库/redis ...

  2. 【SfM】Colmap和openMVG尝试记录

    数据集来源:http://www.maths.lth.se/matematiklth/personal/calle/dataset/dataset.html Colmap与openMVG关于SfM稀疏 ...

  3. Apache Tomcat RCE漏洞复现(CVE-2025-24813)

    漏洞描述 该漏洞的核心在于不完整PUT请求上传时 Tomcat 会使用了一个基于用户提供的文件名和路径生成的临时文件,且路径分隔符被替换为 . . 若同时满足以下条件,攻击者可执行任意代码: 默认 S ...

  4. linux下的nginx重启命令常见以下3种:

    systemctl restart nginx service nginx restart /usr/sbin/nginx -s reload

  5. Ollama本地部署大模型总结

    日拱一卒,功不唐捐 今天计划对之前ollama系列做个回顾,从如何部署到API使用,整理到一篇内容中,提供给大家参考. 安装指南 第一步:安装ollama 我们可以从官网下载ollama,此步骤支持w ...

  6. 【Ubuntu】Ubuntu 24.04 配置镜像源

    [Ubuntu]Ubuntu 24.04 配置镜像源 零.起因 最近在虚拟机中安装了个ubuntu-24.04-desktop-amd64,默认是国外的软件源,很慢,故替换到国内. 壹.替换 源地址( ...

  7. Oracle 11G R2 安装图解

    个人学习需要,在Windows Server 2008 R2 上安装 Oracle 11G R2 Tips:需要下载2个文件,file1和file2 解压后需要合并到同一个文件夹下才能正常安装(这里就 ...

  8. Redis + Springboot + Mybatis插入数据时redis中uid为空

    原因 插入时数据库的id会自增,bean对象无法自动生成uid 解决 在mybatis的插入方法中添加useGeneratedKeys属性 useGeneratedKeys 对于支持自动生成记录主键的 ...

  9. RSA 加密及一些攻击方式

    本文章转载自个人博客seandictionary.top同步更新可能不及时 原理 随机生成两个素数,p , q 令n = p*q 由欧拉公式计算出φ(n) = (p-1)(q-1) 规定e,使得e满足 ...

  10. DPDI(Dispatch PDI)kettle调度管理平台基础版安装部署说明

    DispatchPDI下载 DPDI online部署包下载地址: Windows: http://files.pizzalord.site/api/public/dl/7Tnq6ScE/releas ...