集合—Map子类(HashMap、HashTable、Properties)

news2024/11/17 9:58:37

一、HashMap

  1. HashMap是Map接口使用频率最高的实现类。
  2. HashMap是以键值对(key-value)形式存储数据。
  3. key不能重复,值可以重复,允许使用null作为键或值。
  4. 添加相同的key,新的value将会覆盖原有的value。
  5. 不能保证存取顺序一样。
  6. HashMap没有实现同步,线程不安全。
扩容机制:(和HashSet一模一样,详细源码解读可以去看 HashSet)
    
1.构造器:
        可见其构造器仅初始化加载因子。
    
2.put方法:
    put方法就是HashSet中add方法实际调用的方法,不做介绍了。
3.树化和剪枝:
     HashMap 链表和红黑树的转换

二、HashTable

1.存放的是键值对。
2.键和值都不能为null。
3.方法与HashMap基本一致。
4.HashTable是线程安全的,HashMap是线程不安全的。
5.HashTable底层是数组+链表,不会变成二叉树,因此简单很多。
底层:
构造器:
    可见,无参构造器调用自身的有参构造器,传入参数11和0.75f
    然后在有参构造器中,经过判断之后,直接创建一个内部类Entry类型的数组,大小为11
    然后在给threshold赋值。
    可见其与HashMap不同,即使没有添加元素,也
    
    
put()添加元素:
    首先判断数据是否为null,这一点和HashMap不一样,其不允许value为null。
    然后然后hash得到带加入元素应该加入的位置index。
    之后判断对应位置是否有元素,没有直接调用addEntry()方法并传入参数添加对应键值对。
    有元素则判断对应链表每个元素,判断是否相等,如果相等则直接替换value,然后返回对应旧的值。
        链表到底,依旧没有,则直接调用addEntry()加入。
    最后返回null,可见返回null为正确加入。
  
addEntry():
    先将modCount++,
    然后判断count是否大于阈值,大于旧rehash()扩容,小于则直接加入。
    
rehash():
    可见扩容是将旧的容量*2,然后+1.
    
与HashMap对比:

三、Properties

1.Properties类继承自Hashtable类,并实现了Map接口,也是使用键值对来保存数据。
2.与Hashtable类似。
3.Properties还可以用于从xxx.properties配置文件中,加载数据到Properties类对象并进行读取和修改。
4.因为其继承HashTabel,所以key和value不能有null。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1716861.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索Python编程世界:从基础到实战

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、Python语言简介与动态特性 代码示例:动态类型与变量命名 二、Python应用领…

详解布隆过滤器(含面试考点)

Bloom Filter 底层逻辑主要代码实现解析(以C为例)优缺点应用场景面试常问问题1:什么是布隆过滤器?问题2:布隆过滤器如何处理误报?问题3:如何设计布隆过滤器以最小化误报率?问题4&…

智能仓储物流系统(WMS)系列-货品与分类管理

好的应用系统应是细分简单,界面简洁易操作,程序代码简洁易懂的。

和隋永珍 大麗和和珠宝美学特展闪耀巴黎

2024年5月21日,“和隋永珍”大麗和和珠宝美学特展在巴黎优雅启幕。二零二四甲辰龙年,恰逢中法两国建交60周年,大麗和和以现代东方高级珠宝为引,探讨中国美学的传承与创新,共襄东西方文化交流之盛举。 高级珠宝品牌大麗…

设计模式21——命令模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用,主要是下面的UML图可以起到大作用,在你学习过一遍以后可能会遗忘,忘记了不要紧,只要看一眼UML图就能想起来了。同时也请大家多多指教。 命令模式(Command&…

mysql连接不上可能的原因:防火墙放行mysql的3306端口 全库复制:data目录替换即可 mysql查看版本

1.看本地localhost能否连接 2.在本地看IP能否连接 能说明本地正常 权限也够 都能的话,ip能否ping通 能就说明可能是防火墙原因了。关闭防火墙及杀毒试试。 我这里关防火墙就能访问了。 windows如何开启防火墙,又放行mysql的3306端口? 在 …

盘点韩语中的四字成语柯桥留学韩语学习外语培训

일석이조 一石二鸟 일거양득 一举两得 호장성세 虚张声势 새옹15857575376#지마 塞翁失马 간담상조 肝胆相照 이심전심 心心相印 동고동락 同甘共苦 외유내강 外柔内刚 입신양명 扬名立万 다다익선 多多益善 거두절미 截头去尾 일사천리 一泻千里 자유자재 自由自在 탁상공

操作系统总结6

目录 3.2.1 虚拟内存的基本概念 (1)知识总览 ​编辑(2)传统管理方式的特征、缺点 (3)局部性原理 (4)虚拟内存的定义和特征 (5)如何实现虚拟内存技术 总…

IO系列(九) -什么是零拷贝

一、摘要 相信不少的网友,在很多的博客文章里面,已经见到过零拷贝这个词,会不禁的发出一些疑问,什么是零拷贝? 从字面上我们很容易理解出,零拷贝包含两个意思: 拷贝:就是指数据从…

记录贴 Elasticsearch的RestClient进行DSL查询

must:必须匹配每个子查询,类似“与” should:选择性匹配子查询,类似“或” must_not:必须不匹配,不参与算分,类似“非” filter:必须匹配,不参与算分 import cn.huto…

nginx+keepalived实现nginx高可用集群

实现nginx的高可用 一、简要介绍 ​ nginx作为一款企业级的代理服务器,在各种企业事业单位中,均有广泛的使用,尤其是在前后端分离的项目中,nginx作为路由转发的功能是非常常用的。在一些流量比较大的项目中,为了应对…

idea+tomcat+mysql 从零开始部署Javaweb项目(保姆级别)

文章目录 新建一个项目添加web支持配置tomcat优化tomcat的部署运行tomcatidea数据库连接java连接数据库 新建一个项目 new project;Java;选择jdk的版本;next;next;填写项目名字,选择保存的路径;…

raid 磁盘阵列

raid 磁盘阵列: **条带化存储:**数据分散在多个物理磁盘上的存储方式。利用多个磁盘并行读取和写入。 条带化的存储性能和读写性能是最好的。 磁盘的组成方式不同,也就是不同的raid级别: **raid 0(条带化存储&#x…

.net JQ AJAX 请求 FromBody 接收格式

$.ajax({ url: “/api/banchang/EmpTble/Login2”, type: ‘Post’, data: JSON.stringify({ Emppassword: pass, EmpName: name }), contentType: ‘application/json’, beforeSend: function () { // 禁用按钮防止重复提交 /* $(“#create”).attr({ disabled: “disabled”…

SpringBoot与Spring Framework提供的缓存抽象

目录 缓存 项目总结 新建一个SpringBoot项目 pom.xml application.properties CacheConfig Book BookRepository接口 BookService服务类 BookController控制器 SpringbootCacheApplication启动类 启动项目,使用Postman测试 参考博文: 1、使用…

短视频脚本创作的五个方法 沈阳短视频剪辑培训

说起脚本,我们大概都听过影视剧脚本、剧本,偶尔可能在某些综艺节目里听过台本。其中剧本是影视剧拍摄的大纲,用来指导影视剧剧情的走向和发展,而台本则是综艺节目流程走向的指导大纲。 那么,短视频脚本是什么&#xf…

服务器端请求伪造--SSRF

SSRF 简介 ##SSRF定义 SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由 攻击者构造形成,由服务端发起请求 的一个安全漏洞。一般情况下,SSRF攻击的目标是从 外网无法访问的内部系统(正是因为它是由服务端发起的,所…

FineReport帆软设计器,远程连接服务器

FineReport报表工具一款纯Java编写的企业级web报表软件工具。它能够全面支持主流的B/S架构以及传统的C/S架构,部署方式简单而灵活. 需要使用FineReport帆软设计器,配置远程服务器的方式如下: 1、打开帆软设计器,点击文件&#x…

工程项目管理系统的Java实现:高效协同与信息共享

在当今的工程领域,项目管理的高效协同和信息共享是提升工作效率、降低成本的关键。本文将向您介绍一款基于Java技术构建的工程项目管理系统,该系统采用前后端分离的先进技术框架,功能全面,能够满足不同角色的需求,从项…

中英文语音合成芯片(TTS芯片)WT3000T8-在ETC上的应用案例

一:开发背景: 随着智能化浪潮的推进,ETC(电子不停车收费)系统已逐渐成为现代交通的重要组成部分。在这一背景下,唯创知音自主研发的WT3000T8中文转语音合成芯片(TTS芯片)以其卓越的性…