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

一、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。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux搭建PHP下的RabbitMQ环境(php-amqp/rabbitmq-c/erlang)

本文演示环境 Red Hat 11.2.1-9gcc (GCC) 11.2.1 20220127OpenSSL v1.1.0PHP 7.1 安装erlang erlang和RabbitMQ有版本对应关系Erlang Version Requirements,需要选择正确的版本。 本文以erlang 26和RabbitMQ 3.13.2为例。 erlang下载地址 下载包上传服务器后&a…

Pytorch-Reduction Ops

文章目录 前言1.torch.argmax()2.torch.argmin()3.torch.amax()4.torch.amin()5.torch.all()6.torch.any()7.torch.max()8.torch.dist()9.torch.logsumexp()10.torch.mean()11.torch.norm()12.torch.nansum()13.torch.prod()14.torch.cumsum()15.torch.cumprod() 前言 1.torch.…

FastGPT + OneAPI 构建知识库

云端text-embedding模型 这个在前面的文章FastGPT私有化部署OneAPI配置大模型中其实已经说过,大概就是部署完成OneAPI后,分别新建令牌和渠道,并完成FastGPT的配置。 新建渠道 选择模型的类型并配置对应的词向量模型即可,这里我…

代理注册湖北武汉投资管理公司流程和条件

我公司代理注册湖北武汉投资管理公司,现在大家都知道全国的投资管理公司已经停批了,很多需要收购的老板都是通过收购现成的投资管理公司经营的,现在我告诉大家一个好消息,我们有渠道办理湖北武汉资产管理公司,详情致电…

【Linux终端探险】:从入门到熟练,玩转基础命令的秘密(一)

文章目录 🚀Linux基础命令⭐1. 查看目录命令💥2. 切换目录👊3. 创建目录❤️4. 删除目录/文件🚲5. 修改目录/文件🌈6. 拷贝目录/文件 🚀Linux基础命令 ⭐1. 查看目录命令 在Linux中,查看目录的…

【九十七】【算法分析与设计】图论,迷宫,1207. 大臣的旅费,走出迷宫,石油采集,after与迷宫,逃离迷宫,3205. 最优配餐,路径之谜

1207. 大臣的旅费 - AcWing题库 很久以前,TT 王国空前繁荣。 为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。 为节省经费,TT 国的大臣们经过思考,制定了一套优秀的修建方案,…

[oeasy]python019_ 如何在github仓库中进入目录_找到程序代码_找到代码

继续运行 🥋 回忆上次内容 上上次 真写了万行代码 这 万行代码 都是写在明面上的 这次 使用git命令 下载了 github上面的仓库 下载仓库 之后 又该 怎么办呢?🤔 进入目录 首先看看 目前 在哪个目录 pwd present working directory 当前目…

论文《Planning-oriented Autonomous Driving》详细解析

论文《Planning-oriented Autonomous Driving》详细解析 摘要 现代自动驾驶系统被描述为顺序执行的模块化任务,即感知、预测和规划。为了执行各种任务并实现高级别智能,当前的方法要么为每个任务部署独立的模型,要么设计带有独立头的多任务范…

【YOLOv10】使用yolov10训练自己的数据集/验证 /推理 /导出模型/ONNX模型的使用

YOLOv10: 实时端到端的目标检测。 性能 YOLOv10比最先进的YOLOv9延迟时间更低,测试结果可以与YOLOv9媲美,可能会成为YOLO系列模型部署的“新选择”。 目录 1 数据准备 2 配置文件 3 训练 4 验证 5 预测 6 导出模型 7 ONNX模型的使用 官方论文地址…

高速公路边坡监测预警系统解决方案

一、概述 高速公路是国家交通大动脉,高速公路的安全、稳定是人民生命安全的保障。高速公路地基和边坡在线监测系统是交接高速公路运行状态的耳目,是保证高速公路稳定、安全保障人民生命财产安全、充分发挥高速公路国家交通大动脉的重要手段。高速边坡在线…

国产POE芯片,芯昇电子成熟量产POE芯片,在PSE端和PD端均成熟量产产品

随着技术的发展和市场的需求,国产POE芯片已经逐渐崭露头角。在POE技术领域,POE芯片分为供电设备PSE和受电设备PD,而选择参与802.3bt标准与以太网联盟徽标计划的厂商来生产这些芯片,可以确保在互操作性和合规性上更有把握。过去…

藏汉双语翻译平台,专业准确的藏语翻译工具和藏文OCR识别工具,在西藏提高工作效率的利器!

如果你正在找一款支持藏语-汉语双向翻译、操作简单、功能又丰富的藏汉在线翻译器,那就不得不推荐一下近期上线的藏汉翻译通小程序。在西藏工作、拉萨旅游或者写藏文作文时,如果你有翻译藏语的需求,那它,就能满足你,协助…

脑机接口:是现代医学的外挂,更是瘫痪病人的豪赌

5 月 17 日,马斯克公开表示,继今年年初首次成功将大脑芯片植入患者大脑后,Neuralink 正在寻找第二位受试者接受这项手术。 5 月 20 日,美国食品药品监督管理局 (FDA) 批准了马斯克的 Neuralink 公司为第二位患者植入脑芯片&#…

JavaSE——类和对象(三)~~继承

目录 一.继承 1.为什么需要继承 2 .继承概念 3.继承的语法格式 4.继承的特性及好处 5.父类成员访问 6.继承关系上的代码块执行顺序​​​​​​​ 二.继承与组合 一.继承 1.为什么需要继承 Java中使用类对现实世界中实体来进行描述,类经过实例化之后的产物…

2024年学浪视频怎么录屏

由于学浪最新版PC学生版客户端已经有防止录屏,而且录屏效率太慢,本文将介绍你一种高效率的工具,小浪助手.exe,它可以很轻松的将你的学浪视频下载下来 学浪下载工具我已经打包好了,有需要的自己下载一下 注意&#xf…

wxPython应用开发-后台线程更新大量数据到wxGrid避免ui无响应

一、问题描述 最近几天,我在用python开发一个数据处理的小工具。需要将xls文件中的大量数据(少则几千行多则几万行)读取出来后进行处理。其中一个功能是需要实现将读取到的原始数据和计算出来的结果在软件界面中以表格形式展示出来。 在pyt…

JVM学习-垃圾回收(二)

标记-清除(Mark-Sweep)算法 当堆中的有效内存空间被耗尽的时候,就会停止整个程序(stop the world),然后进行两项工作,第一项则是标记,第二项是清除 标记:Collector从引用根节点开始遍历,标记所有被引用的…

Redis分布式存储方案

一、Redis分布式存储方案 1、哈希取余分区 ①、原理 哈希计算:首先,对每个键(key)进行哈希计算,得到一个整数哈希值(hash value)。取余操作:将这个哈希值对服务器数量进行取余操作…

Ansible03-Ansible Playbook剧本详解

目录 写在前面5. Ansible Playbook 剧本5.1 YAML语法5.1.1 语法规定5.1.2 示例5.1.3 YAML数据类型 5.2 Playbook组件5.3 Playbook 案例5.3.1 Playbook语句5.3.2 Playbook1 分发hosts文件5.3.3 Playbook2 分发软件包,安装软件包,启动服务5.3.3.1 任务拆解…

数分之SQL查询电商数据案例

1,Python连接SQL数据库 以下是使用Python连接MySQL数据库并进行操作的示例代码: import random import time import pymysql# 定义名字数据 xing ["王", "李", "张", "刘", "陈", "杨", "黄&q…