Java中Hashtable和HashMap区别「建议收藏」

Java中Hashtable和HashMap区别「建议收藏」第一,继承不同。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

第一,继承和实现不同

public class Hashtable<K,V>
    extends Dictionary<K,V>
    implements Map<K,V>, Cloneable, java.io.Serializable

public class HashMap<K,V>
    extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable

第二,线程安全不同

Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。Hashtable的所有 public 方法声明中都有 synchronized 关键字。在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了。

第三,对NULL处理不同

Hashtable中,key和value都不允许出现null值。

在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。

第四,两个遍历方式的内部实现上不同

Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。

第五,哈希值使用不同

哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。

HashTable:

int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;

HashMap:

int hash = hash(k);
int i = indexFor(hash, table.length);

static int hash(Object x) {
  int h = x.hashCode();

  h += ~(h << 9);
  h ^= (h >>> 14);
  h += (h << 4);
  h ^= (h >>> 10);
  return h;
}

static int indexFor(int h, int length) {
  return h & (length-1);

第六,默认大小和增长方式不同

Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192110.html原文链接:https://javaforall.net

(0)
上一篇 2026年1月19日 上午7:22
下一篇 2026年1月19日 上午8:01


相关推荐

  • Nginx工作原理和优化总结。「建议收藏」

    NGINX以高性能的负载均衡器,缓存,和web服务器闻名,驱动了全球超过40%最繁忙的网站。在大多数场景下,默认的NGINX和Linux设置可以很好的工作,但要达到最佳性能,有些时候必须做些调整。首先我们先了解其工作原理。1.Nginx的模块与工作原理Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客…

    2022年4月13日
    89
  • 软件测试基础知识 – 测试开发需要哪些知识,需要具备什么能力

    软件测试基础知识 – 测试开发需要哪些知识,需要具备什么能力分享一个大牛的人工智能教程 零基础 通俗易懂 风趣幽默 希望你也加入到人工智能的队伍中来 请点击 http www captainbed netDefinitio Decoratorspr

    2026年3月19日
    1
  • Google earthios_初步探索的重要成果

    Google earthios_初步探索的重要成果一、申请使用1.GoogleEarthStudio(以下简称GES)需要申请才能使用,前往GoogleEarthStudio官网注册申请,审核时间较久.2.审核通过,填写信息时留下的邮箱会收到如下提醒3.在Chrome浏览器中打开网址https://earth.google.com/studio/,会看到如下截图二、启动页1.新建项目,有两种方式分别是Blan…

    2026年1月22日
    5
  • 【转】wpf和winform的区别

    【转】wpf和winform的区别WinForm 是 Net 开发平台中对 WindowsForm 的一种称谓 WPF WindowsPrese 是微软推出的基于 Windows 的用户界面框架 属于 NETFramework 0 的一部分 它提供了统一的编程模型 语言和框架 真正做到了分离界面设计人员与开发人员的工作 同时它提供了全新的多媒体交互用户图形界面 是微软推出取代 winform 的产品 能做到分离界面设计人员与开发人员的工作 提供多媒体交互用户图形界面 三大核心程序集是 presentat

    2026年3月20日
    2
  • 希尔排序算法(排序详解)

    希尔排序算法(排序详解)希尔排序 nbsp 基本思想希尔排序 ShellSort 是插入排序的一种 也称缩小增量排序 是直接插入排序算法的一种更高效的改进版本 希尔排序是非稳定排序算法 该方法因 DL Shell 于 1959 年提出而得名 希尔排序是记录按下标的一定增量分组 对每组使用直接插入排序算法排序 随着增量逐渐减少 每组包含的关键词越来越多 当增量减至 1 时 整个文件恰被分成一组 算法便终止 我们分割待排序记录的目的

    2026年3月18日
    2
  • mysql8msi安装教程(数据库mysql安装教程)

    来看这篇文章的肯定是小白,好巧,我也是。。。。。。。废话不多说,先去官网(https://dev.mysql.com/downloads/mysql/)下载mysql。(国外网址,页面可能较慢)往下拉等页面跳转之后,开始选择下载接着下载。。。。ok,下载阶段结束,去安装吧。打开安装程序,同意安装协议。来到这里选择默认,一路傻瓜next;我们选择…

    2022年4月11日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号