Hashtable、HashMap、TreeMap心得:

HashMap、HashTable、TreeMap用法与区别分析篇 HashMap、HashTable学习篇1. HashMap基本使用篇1.1 是否允许空值、空键1.2 HashMap的遍历1.3 常用方法1.4 程序示例 1. HashMap基本使用篇 1.1 是否允许空值、空键 HashMap允许空值、空键 HashMap允许同时存在空值、空键 HashMap不允许键重复,如果重复,新值覆盖旧值。 1.2 HashMap的遍历 通过keySet方法... 阅读详情

三者均实现了Map接口,存储的内容是基于key-value的键值对映射,一个映射不能有重复的键,一个键最多只能映射一个值。

(1) 元素特性

HashTable中的key、value都不能为null;HashMap中的key、value可以为null,很显然只能有一个key为null的键值对,但是允许有多个值为null的键值对;TreeMap中当未实现 Comparator 接口时,key 不可以为null;当实现 Comparator 接口时,若未对null情况进行判断,则key不可以为null,反之亦然。

(2)顺序特性

HashTable、HashMap具有无序特性。TreeMap是利用红黑树来实现的(树中的每个节点的值,都会大于或等于它的左子树种的所有节点的值,并且小于或等于它的右子树中的所有节点的值),实现了SortMap接口,能够对保存的记录根据键进行排序。所以一般需要排序的情况下是选择TreeMap来进行,默认为升序排序方式(深度优先搜索),可自定义实现Comparator接口实现排序方式。

(3)初始化与增长方式

初始化时:HashTable在不指定容量的情况下的默认容量为11,且不要求底层数组的容量一定要为2的整数次幂;HashMap默认容量为16,且要求容量一定为2的整数次幂。

扩容时:Hashtable将容量变为原来的2倍加1;HashMap扩容将容量变为原来的2倍。

(4)线程安全性

HashTable其方法函数都是同步的(采用synchronized修饰),不会出现两个线程同时对数据进行操作的情况,因此保证了线程安全性。也正因为如此,在多线程运行环境下效率表现非常低下。因为当一个线程访问HashTable的同步方法时,其他线程也访问同步方法就会进入阻塞状态。比如当一个线程在添加数据时候,另外一个线程即使执行获取其他数据的操作也必须被阻塞,大大降低了程序的运行效率,在新版本中已被废弃,不推荐使用。

HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步(1)可以用 Collections的synchronizedMap方法;(2)使用ConcurrentHashMap类,相较于HashTable锁住的是对象整体, ConcurrentHashMap基于lock实现锁分段技术。首先将Map存放的数据分成一段一段的存储方式,然后给每一段数据分配一把锁,当一个线程占用锁访问其中一个段的数据时,其他段的数据也能被其他线程访问。ConcurrentHashMap不仅保证了多线程运行环境下的数据访问安全性,而且性能上有长足的提升。

(5)一段话HashMap

HashMap基于哈希思想,实现对数据的读写。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。HashMap在每个链表节点中储存键值对对象。当两个不同的键对象的hashcode相同时,它们会储存在同一个bucket位置的链表中,可通过键对象的equals()方法用来找到键值对。如果链表大小超过阈值(TREEIFY_THRESHOLD, 8),链表就会被改造为树形结构。

在并发修改期间,相应 Segment 会被锁定。

Java 中 Hashtable 、HashMap 、TreeMap 有什么不同? Java 中 Hashtable 、HashMap 、TreeMap 有什么不同? HashTable 最早期的 Java 类库提供的一个 Hash表实现,本身是同步的,不支持 null 键和值,对同步有导致性能开销,很少被推荐使用。 HashMap 是应该更加广泛的哈希表实现,行为上与 hashtable 一致,主要区别是 Hashmap 不是同步的,支持null 建和值。 HashMap 进行 put 或者 get 操作,可以达到常熟时间的性能,所以绝大多数场景都使用 HashMap。 TreeMap 阅读详情

相关推荐

从“Segmentation fault”到流畅运行:深入解析CARLA Engine crash与Signal 11报错排查指南

本文深入解析了CARLA仿真平台运行时遭遇的Engine crash与Signal 11(Segmentation fault)报错。文章指出,该错误的根本原因常与NVIDIA显卡驱动版本不兼容有关,并提供了从日志分析、常见方案试错到驱动安全降级的完整排查指南,帮助用户从崩溃走向流畅运行。

pca5navigator的博客 463

c++ map是有序还是无序的_面试半年!三面阿里,四面蚂蚁金服,居然倒在了一个Java集合之Map上?...

Map接口Map与Collection并列存在。用于保存具有映射关系的数据:key-valueMap中的key和value都可以是任何引用类型的数据Map中的key用set来存放,不允许重复,即同一个Map对象所对应的类,须重写 hashCode()和 equals()方法常用 String类作为Map的“键”key和value之间存在单向一对一关系,即通过指定的key总能找到唯一的、确...

weixin_29661797的博客 107

MediaPipe+Unity动作捕捉实战:如何用普通摄像头驱动3D人物模型(附避坑指南)

本文详细介绍了如何利用MediaPipe和Unity实现低成本动作捕捉,仅需普通摄像头即可驱动3D人物模型。通过MediaPipe的3D坐标预测能力,结合Unity的骨骼映射优化,解决单目摄像头下的三维重建难题,并提供实战避坑指南和性能优化技巧,帮助开发者快速实现专业级的人物模型驱动效果。

weixin_29047545的博客 358

HashMap、Hashtable、TreeMap异同深度详解

本文深入对比分析了Java中三种Map实现类:HashMap、Hashtable和TreeMap的核心差异。HashMap基于哈希表实现,提供O(1)查询性能,线程不安全但效率高;Hashtable是线程安全的遗留类,性能较差;TreeMap基于红黑树实现,保证元素有序但查询复杂度为O(log n)。文章从历史渊源、继承体系、底层数据结构、线程安全性、排序特性等多个维度进行剖析,重点解读了HashMap的扩容机制、树化转换等设计哲学,并提供了各场景下的选型建议。掌握这些差异有助于在实际开发中做出合理的技术决

百锦再的博客 1046

11 CO配置-控制-成本中心会计-定义分割结构(OKES-Define Splitting Structure)

业务背景:定义分割结构 事务码: OKES SPRO路径:SPRO->控制->成本中心会计->实际过账->期末结算->作业分配->划分->定义分割结构 第1步,SPRO路径进入 第2步,选择“新的条目”创建 分割结构 第3步,选择分割结构代码 点击“分割规则”进行下一个界面,点击“新条目”创建 分割结构规则 第4步,点击“为规则选择” 为分割结构规则创建版本并保存 第5步,选择“分配”,点击“新的条目” 输入分割结构分配

4371

DFT实战:如何用Synopsys工具搞定多时钟域Scan Chain设计(附避坑指南)

本文详细解析了使用Synopsys DFT Compiler工具链实现多时钟域Scan Chain设计的全流程,包括时钟混合策略、跨时钟域平衡技巧和实战脚本剖析。通过量产验证的工程实践方案,帮助DFT工程师有效解决复杂SoC设计中的Scan Chain挑战,提升测试效率和质量。

mm9012的博客 1033

Hashtable、HashMap、TreeMap有什么区别?

Map是java广义集合框架的另外一部分,其中HashMap又是使用频率最高的类型之一。所以HashMap本身和相关类型也是经常在面试中被提问。 一般可以回答的内容主要是基本特征、数据结构、HashMap的设计,其他可以问的问题可以更多,大多为HashMap的源码,hash算法等。 典型回答: Hashtable、HashMap、TreeMap都实现了Map接口,使用键值对的形式存储数据和...

兴国-为梦想而战 9621

详细对比模型训练和模型精调

当我们进行模型精调(Fine-Tuning)和模型训练时,我们需要考虑到不同的步骤和目标。

pumpkin84514的博客 1852

Java HashMap、Hashtable、HashSet、TreeMap 之间的区别

HashSet 底层是基于 HashMap 实现的,除了 clone()、writeObject()、readObject()是 HashSet 自己实现的,其他方法都是直接调用 HashMap 中的方法。这些方法都是基于红黑树数据结构的属性实现的,红黑树保持平衡状态,从而保证了搜索操作的时间复杂度为 O(log n),这让 TreeMap 成为了处理有序集合搜索问题的强大工具。综上所述,相比于 HashMap,TreeMap 主要多了对集合中的元素根据键排序的能力以及对集合内元素的搜索能力。

好记性不如烂笔头 866

隧道裂缝检测【C++PCL】

我们团队注重每一个细节,确保代码的可读性、可维护性和可扩展性达到最高标准。我们严格遵循行业最佳实践,采用模块化和面向对象的设计原则,使得我们的代码结构清晰且易于理解。我们的点云服务更是引以为傲。我们的技术团队拥有深厚的专业知识和丰富的经验,能够提供高度准确和高效的点云处理服务。无论是点云的获取、存储还是分析,我们都能够满足客户的需求,并提供出色的解决方案。我们的技术实力也是无与伦比的,拥有广泛的技术背景和深入的专业知识。

weixin_45196569的博客 848

【Network Management】AUTOSAR局部网络管理从0到1配置实践

AUTOSAR局部网络管理从0到1配置实践

qq_36056498的博客 2914

Hashtable、HashMap、TreeMap的区别

然而,向 TreeMap 添加 null 值是允许的,我们可以看到 Cherry 对应的值被成功添加为 null。在非多线程环境中,或者在读多写少的场景下(可以通过外部同步来解决线程安全问题),HashMap 是一个优选,因为它提供了更好的性能。它是同步的,这意味着它是线程安全的,但这也意味着它通常比非同步的实现(如 HashMap )慢。它是非同步的,这意味着它不是线程安全的,但其性能在单线程环境下通常比 Hashtable 好。在需要根据键进行排序的应用中,如时间线索引、自然排序的目录结构等。

m0_68642284的博客 1216

【入门AUTOSAR网络管理测试】CANoe测试T_WakeUp时间

随着智能电动汽车行业的快速发展,目前AUTOSAR网络管理也得到了广泛应用,AUTOSAR网络管理测试也是汽车网络测试中非常重要的环节,NM问题导致的汽车ECU不能唤醒、电瓶亏电等问题,对于新入门AUTOSAR网络管理测试的同学不清楚如何开展测试,那么本章节就主要给大家介绍网络管理中T_WakeUp时间如何测试。【入门AUTOSAR网络管理测试】AUTOSAR网络管理规范需求解读。

测试领域技术分享 2135

HashMap,HashTable,TreeMap,HashSet,TreeSet

本文承接上文 https://blog.youkuaiyun.com/worn_xiao/article/details/105900828 2.2 map Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。 Map没有继承于Collection接口 从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。 2.2.1 map常用元素 1 添加,删除操作: ...

worn_xiao的博客 909

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java集合中HashMap、TreeMap和HashTable区别是什么?

一、说到三者的区别首先要说一下集合和数组的区别是什么: 1.长度上的区别:集合的长度是可变的,而数组的长度是不可变; 2.内容上的区别:数组可以是基本数据类型的数据,也可以是引用数据类型的数据;而集合只能是引用数据类型数据; 3.元素内容上的区别:数组只能存储同一种数据类型;而集合可以存储不同数据类型(其实集合一般情况下也是存储同一种数据类型); 二、Java集合常见的接口和实现类有哪...

冰冻非一日之寒 4041

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

HashTable、HashMap、TreeMap的区别

在不考虑线程安全使用的时候,HashMap使用的时候居多,是因为它具有的api都很直接很方便,在面试的时候这些集合属性也是面试的焦点,但是也多半是问一下线程安全方面的问题,对比之间的不同,现在不会主要去讲述线程安全,而是从基础的角度出发,对这三种集合属性进行一下简单的介绍。 简介 三者都是一些常见的集合属性的具体实现,以键值对的方式进行存储并进行对数据的操作。 HashMap是应用十分广泛的一个哈...

weixin_44240370的博客 565

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java Map 三大核心实现类详解:HashMap、TreeMap、Hashtable

若键是自定义类(未实现Comparable),需通过Comparator// 自定义Person类(未实现Comparable)@Override// getter方法(用于排序)// 按Person的age降序排序@Override// 降序:p2.age - p1.age;升序:p1.age - p2.age});personJobs.put(new Person("张三", 25), "程序员");

2301_82132279的博客 1138

随笔录--Hashtable、HashMap、TreeMap

Hashtable、HashMap、TreeMap介绍

Bigbin666的博客 1120

Hashtable、HashMap 与 HashTable区别、HashMap、Hashtable和TreeMap、 LinkedHashMap

Hashtable、HashMap 与 HashTable区别、HashMap、Hashtable和TreeMap、 LinkedHashMap

↫/(ㄒoㄒ)/~~不太会打代码的搬运工↬ 929

Hashtable,HashMap,TreeMap之间的区别

Hashtable,HashMap,TreeMap都是一些常见的Map实现。都是以键值对的形式来存储和操作的容器类型。首先分析一下为什么Hashtable为什么不支持驼峰命名规则呢?因为Hashtable是JAVA早期提供的一个哈希表实现,这时候还不支持驼峰命名呢,等到Java实现支持驼峰命名的时候,像重写Hashtable的时候,但这个时候有很多第三方应用已经使用了Hashtable这个名字,要...

jiankangzhu的博客 1156

hashMap、hashTable、treeMap

1、hashTable是线程安全的、hashMap不是线程安全的 hashmap 线程不安全 允许有null的键和值 效率高一点、 方法不是Synchronize的要提供外同步 有containsvalue和containsKey方法 HashMap 是Ja...

qq_41154871的博客 524

HashMap 、 HashSet 、 Hashtable 、 ConcurrentHashMap 、TreeMap 的区别是什么

欢迎大家加入我的开源项目,或者(在我的主页联系我)加入你们的开源项目,点点Github-Stars。

jj89929665的博客 2215

HashMap、TreeMap、HashTable区别

参考链接:http://www.importnew.com/7010.html

沐唐风宋雨 852

从源代码看TreeMap、HashMap、Hashtable、ConcurrentHashMap、LinkedHashMap特性

TreeMap、HashMap、Hashtable、ConcurrentHashMap、LinkedHashMap 这几个都是Map的实现类,但是都有各自的特点: HashMap是基于Hash算法实现Hashtable具有线性安全的特点TreeMap取出来的键值对是排序后LinkedHashMap是按照插入顺序取出来的键值对ConcurrentHashMap并发包下Map,也具有

专注;坚持 1773

集合HashMap、TreeMap、HashTable、LinkedHashMap

Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继承关系如下图所示: 下面针对各个实现类的特点做一些说明: (1) HashMap:它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 Has...

lwx675652056的博客 503
上一篇: 对比 Hashtable、HashMap、TreeMap 、LinkedHashMap有什么不同?之一
下一篇: 接口、抽象类和类的一些比较
wangxuejava
博客等级 码龄7年 6粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值