hashmap和hashtable和hashset的区别_Hashtable

hashmap和hashtable和hashset的区别_Hashtable相同点:hashmap和Hashtable都实现了map接口不同点:Hashtable是不允许键或值为null的,HashMap的键值则都可以为null。实现方式不同:Hashtable继承了Dictionary类,而HashMap继承的是AbstractMap类。初始化容量不同:HashMap的初始容量为:16,Hashtable初始容量为:11,两者的负载因子默认都是:0.75。扩容机制不同:当已用容量>总容量*负载因子时,HashMap扩容规则为当前

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

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

相同点:

  1. hashmap和Hashtable都实现了map、Cloneable(可克隆)、Serializable(可序列化)这三个接口

不同点:

  1. 底层数据结构不同:jdk1.7底层都是数组+链表,但jdk1.8 HashMap加入了红黑树
  2. Hashtable 是不允许键或值为 null 的,HashMap 的键值则都可以为 null。
  3. 添加key-value的hash值算法不同:HashMap添加元素时,是使用自定义的哈希算法,而HashTable是直接采用key的hashCode()
  4. 实现方式不同:Hashtable 继承的是 Dictionary类,而 HashMap 继承的是 AbstractMap 类。
  5. 初始化容量不同:HashMap 的初始容量为:16,Hashtable 初始容量为:11,两者的负载因子默认都是:0.75。
  6. 扩容机制不同:当已用容量>总容量 * 负载因子时,HashMap 扩容规则为当前容量翻倍,Hashtable 扩容规则为当前容量翻倍 +1。
  7. 支持的遍历种类不同:HashMap只支持Iterator遍历,而HashTable支持Iterator和Enumeration两种方式遍历
  8. 迭代器不同:HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。而Hashtable 则不会。
  9. 部分API不同:HashMap不支持contains(Object value)方法,没有重写toString()方法,而HashTable支持contains(Object value)方法,而且重写了toString()方法
  10. 同步性不同: Hashtable是同步(synchronized)的,适用于多线程环境,
    而hashmap不是同步的,适用于单线程环境。多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。

由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 实现学员管理系统

    实现学员管理系统”””班级学员管理系统需求:简单的设计一下首页。1、添加学员信息,设计简单的页面2、删除学员信息,学员信息为空则不执行操作3、修改学员信息,学员信息为空不执行操作(当修改的学员的姓名不在列表中时返回错误)4、查找学员信息,把学员信息,依次输出在终端页面”””Student_List=[]whileTrue:print(”)print(‘–…

    2026年2月4日
    3
  • vue 文件上传至服务器_oss文件服务器

    vue 文件上传至服务器_oss文件服务器为什么使用对象存储OSS很多企业的文件上传下载都是通过文件流的形式进行上传下载的,需要后端配合,对服务器压力很大,而且高消费,对公司损失太大,我们选择使用oss将尽可能地缩小成本,以及对网站及逆行大幅度提升使用对象存储OSS改变了什么网站数据动静分离,大幅提升网页性能 单独的文件管理界面,管理网站文件和本地电脑一样高效率方便使用 成本低,资源弹性伸缩,按需付费什么是对象存储OSS阿里云对象存储OSS(ObjectStorageService)是一款海量、安全、低成本、高可靠的云存储

    2022年8月15日
    8
  • 提升效率的秘密,仅需这一篇吃透负载均衡

    提升效率的秘密,仅需这一篇吃透负载均衡写在前面写本文的目的: 对负载均衡的理解零零散散,不成体系。 阅读这篇文章需要的条件: 对OSI模型有些许了解 有耐心。本文涉及大量的知识点,且只能用文字才能讲清楚,所以文字比较多。 收获: 读完此篇文章,从宏观的角度理解了负载均衡的原理以及实现机制。加深对分布式架构的了解 主要内容: 本文首先从概念开始,讲解什么是负载均衡,以及负载均衡在分布式系统中所承担的角色以及提供的功能。 讲解负载均衡的分类。分别从软硬件角度、地域范围角度以及…

    2022年7月19日
    12
  • C#的AutoSize「建议收藏」

    C#的AutoSize「建议收藏」将AutoSize设置为false,控件大小随着Form的变化而变大或者缩小。如果为true,出现问题。转载于:https://www.cnblogs.com/mantian/archive/2010/08/04/1792480.html

    2022年5月3日
    52
  • pycharm导入pandas模块_pycharm如何导入python的库

    pycharm导入pandas模块_pycharm如何导入python的库pycharm上安装库(以pandas为例)网上有些反应安装pandas库时会出现问题,提示好像是pip的原因。这时候大概是自己的pip版本太久啦。所以最好先在cmd更新一下pip好了。在cmd输入命令:python-mpipinstall-Upip出现成功信息:Requirementalreadyup-to-date即可。之后打开pycharm1、点击右上角file/se

    2022年8月26日
    6
  • java怎么运行_怎样启动JAVA?「建议收藏」

    java怎么运行_怎样启动JAVA?「建议收藏」展开全部在Android中启动Java程序其实有很多种方式,现总结如下一、在Android应用程序中e69da5e887aa62616964757a686964616f31333363373732发送Intent启动Android应用程序这个方式最简单,最常用。在此不在累述。关于Intent的更多内容请阅读《Intent技术简介》二、在shell控制台通过am命令发送Intent来启动Androi…

    2022年7月7日
    43

发表回复

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

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