学习笔记043——HashMap源码学习1
文章目录
- 1、HashMap
- 2、Hashtable
- 3、TreeMap
- 4、HashMap 底层结构
- 4.1、什么是红黑树?
1、HashMap
HashMap key 是不能重复的,value 可以重复
底层结构 key-value 进行存储,key-value 存入到 Set 中,再将 Set 装载到 HashMap
package com.southwind;import java.util.*;public class HashMapTest {public static void main(String[] args) {HashMap hashMap = new HashMap();hashMap.put("h", "Hello");hashMap.put("w", "World");hashMap.put("j", "Java");System.out.println(hashMap);System.out.println("***********************************");//map有3种遍历方式//1、获取Set(包含kv)Set set = hashMap.entrySet();Iterator<Map.Entry> iterator = set.iterator();while (iterator.hasNext()) {Map.Entry next = iterator.next();System.out.println(next.getKey()+"------------"+next.getValue());}System.out.println("****************************************");//2、获取key所在的set集合Set keySet = hashMap.keySet();Iterator iterator1 = keySet.iterator();while (iterator1.hasNext()) {System.out.println(iterator1.next());}System.out.println("****************************************");//3、获取value所在的Collection集合Collection values = hashMap.values();Iterator iterator2 = values.iterator();while (iterator2.hasNext()) {System.out.println(iterator2.next());}}
}
2、Hashtable
用法和 HashMap 一致,区别在于 Hashtable 是较早推出的一个类,是线程安全的,效率低。
HashMap 是线程不安全的,效率高。
3、TreeMap
TreeMap 中存储有序的元素,存入的元素会自动进行排序,按照 key 值进行升序排列。
package com.southwind;import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;public class TreeMapTest {public static void main(String[] args) {TreeMap treeMap = new TreeMap();treeMap.put(3, "Java");treeMap.put(5, "JavaME");treeMap.put(1,"Hello");treeMap.put(6, "JavaEE");treeMap.put(2, "World");treeMap.put(4, "JavaSE");Set keySet = treeMap.keySet();Iterator iterator = keySet.iterator();while (iterator.hasNext()) {Object next = iterator.next();System.out.println(next + "---" + treeMap.get(next));}}
}
package com.southwind;import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;public class TreeMapTest {public static void main(String[] args) {TreeMap treeMap = new TreeMap();treeMap.put(new C(1), "Java");treeMap.put(new C(2), "JavaME");treeMap.put(new C(3),"Hello");treeMap.put(new C(4), "JavaEE");treeMap.put(new C(5), "World");treeMap.put(new C(6), "Big");treeMap.put(new C(7), "JavaSE");Set keySet = treeMap.keySet();Iterator iterator = keySet.iterator();while (iterator.hasNext()) {Object next = iterator.next();System.out.println(next + "---" + treeMap.get(next));}}
}class C implements Comparable{private int num;public C(int num) {this.num = num;}/*** A.compareTo(B)* 1 A>B* 0 A=B* -1 A<B* @param o* @return*/@Overridepublic int compareTo(Object o) {C c = (C) o;if(this.num > c.num) return -1;if(this.num == c.num) return 0;if(this.num < c.num) return 1;return 0;}@Overridepublic String toString() {return "C{" +"num=" + num +'}';}
}
4、HashMap 底层结构
HashMap 底层其实是一个数组,成为哈希桶,JDK 1.7 和 JDK 1.8 底层结构是不同的。
JDK 1.7:数组+链表
JDK 1.8:数组+链表+红黑树
4.1、什么是红黑树?
红黑树是一个平衡二叉树
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
红黑树
1、结点是红色或者黑色
2、根节点是黑色的
3、每个叶子节点都是空节点
4、每个红色节点的两个子节点都是黑色的
5、从任一节点到它的每个叶子节点的所有路径都包含相同数目的黑色节点
哈希冲突:key 所映射的 hash 一样
HashMap 源码
从构造器入手来看
并没有创建数组,而是给加载因子赋值 = 0.75,加载因子是用来完成数组扩容的。
只有在添加数据的时候才会创建数组,HashMap 是懒加载的形式。
DEFAULT_INITIAL_CAPACITY 就是数组的初始化长度,16,哈希桶默认的长度为 16
数组长度为 16,存入多少个元素的时候,需要进行数组扩容呢?
16 * 0.75 = 12,每次扩容是给数组长度乘以 2,16 --> 32
相关文章:
学习笔记043——HashMap源码学习1
文章目录 1、HashMap2、Hashtable3、TreeMap4、HashMap 底层结构4.1、什么是红黑树? 1、HashMap HashMap key 是不能重复的,value 可以重复 底层结构 key-value 进行存储,key-value 存入到 Set 中,再将 Set 装载到 HashMap pack…...
单点登录原理
允许跨域–>单点登录。 例如https://www.jd.com/ 同一个浏览器下:通过登录页面产生的cookie里的一个随机字符串的标识,在其他子域名下访问共享cookie获取标识进行单点登录,如果没有该标识则返回登录页进行登录。 在hosts文件下面做的域名…...
【随笔】AI大模型对软件开发的影响
随着 AI 技术的不断发展,AI大模型正在重塑软件开发流程,从代码自动生成到智能测试,未来,AI 大模型将会对软件开发者、企业,以及整个产业链都产生深远的影响。欢迎探讨 AI 是如何重塑软件开发的各个环节以及带来的新的流…...
JAVA中接口类和抽象类的区别
在Java中,接口(Interface)和抽象类(Abstract Class)都是实现抽象概念的方式,但它们之间存在一些关键的区别: 1. 定义和声明 抽象类: 使用abstract关键字声明。可以包含构造方法、成…...
【AI系统】昇腾 AI 架构介绍
昇腾 AI 架构介绍 昇腾计算的基础软硬件是产业的核⼼,也是 AI 计算能⼒的来源。华为,作为昇腾计算产业⽣态的⼀员,是基础软硬件系统的核⼼贡献者。昇腾计算软硬件包括硬件系统、基础软件和应⽤使能等。 而本书介绍的 AI 系统整体架构&#…...
uniapp input只输入一个字符就自动失去焦点
下面一段代码在每次输入后自动失去焦点,这是因为绑定的:key是动态的,输入改变后都需要重新刷新渲染,这是造成input只能输入一次就自动失去焦点的原因。 <view class"" v-for"(item, index) in phoneList" :key"…...
定时/延时任务-ScheduledThreadPoolExecutor的使用
文章目录 1. 概要2. 固定速率和固定延时2.1 固定速率2.2 固定延时 3. API 解释3.1 schedule3.2 固定延时 - scheduleWithFixedDelay3.2 固定速率 - scheduleWithFixedDelay 4. 小结 1. 概要 前三篇文章的地址: 定时/延时任务-自己实现一个简单的定时器定时/延时任…...
自编码器(一)
其实自编码器也可以算是自监督学习的一环,因 此我们可以再简单回顾一下自监督学习的框架。如图1.1所示,首先你有大量的没有标注的 数据,用这些没有标注的数据,你可以去训练一个模型,你必须设计一些不需要标注数据的 任…...
Spring Cloud(Kilburn 2022.0.2版本)系列教程(五) 服务网关(SpringCloud Gateway)
Spring Cloud(Kilburn 2022.0.2版本)系列教程(五) 服务网关(SpringCloud Gateway) 一、服务网关 1.1 什么是网关 在微服务架构中,服务网关是一个至关重要的组件。它作为系统的入口,负责接收客户端的请求,并将这些请求路由到相应的后端服务…...
40分钟学 Go 语言高并发:Go程序性能优化方法论
Go程序性能优化方法论 一、性能指标概述 指标类型关键指标重要程度优化目标CPU相关CPU使用率、线程数、上下文切换⭐⭐⭐⭐⭐降低CPU使用率,减少上下文切换内存相关内存使用量、GC频率、对象分配⭐⭐⭐⭐⭐减少内存分配,优化GC延迟指标响应时间、处理延…...
一文解析Kettle开源ETL工具!
ETL(Extract, Transform, Load)工具是用于数据抽取、转换和加载的软件工具,用于支持数据仓库和数据集成过程。Kettle作为传统的ETL工具备受用户推崇。本文就来详细说下Kettle。 一、Kettle是什么? Kettle 是一款开源的 ETL&#x…...
Tomcat新手成长之路:安装部署优化全解析(上)
文章目录 1.Tomcat简介2.Tomcat原理架构2.1.总体架构2.2.连接器2.2.1.具体功能2.2.2.IO模型2.2.3.逻辑处理流程2.2.4.内部处理流程 2.3.容器2.4.启动过程2.5.请求过程 3.Tomcat适用场景4.Tomcat与其他Web容器对比5.Tomcat安装和启动5.1.Java环境变量5.2.系统服务5.3.启动关闭 6…...
跟我学C++中级篇——通信的数据的传递形式
一、通信的数据传递 在开发程序中,无可避免的会进行数据的传递。这种传递方式有很多种,字节流、消息、Json、参数以及对象甚至可能的方法。那么在传递这些数据时,如何正确的采用更合适的方法,就成为了一个设计的首选的问题。 二…...
C语言 qsort及应用
qsort及应用 qsort:快速排序函数,需要引用stdlib.h文件. void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *, const void *) ); 参数: base:需要排序的数组 num:数据个数(数组长度) width:每个数据的字节数(sizeof(数据类型)) compa…...
【C语言】连接陷阱探秘(4):检查外部类型
目录 一、外部类型概述 1.1. 外部类型的重要性 1.2. 外部类型在C语言中的使用 1.3. 注意事项 二、常见的外部类型陷阱 2.1. 结构体和联合体的大小不匹配 2.1.1. 示例代码 2.1.2. 正确的做法 2.2. 枚举类型的值不匹配 2.3. 函数签名不一致 2.3.1. 函数签名不一致的问…...
打造双层环形图:基础与高级渐变效果的应用
在数据可视化领域,环形图因其独特的展示方式而广受欢迎。今天,我们将通过ECharts库来创建一个具有双层渐变效果的高级环形图。本文将详细介绍如何实现这种视觉效果。 1. 环形图基础 首先,我们需要了解环形图的基本构成。环形图由内外两个圆…...
【Git】Git 完全指南:从入门到精通
Git 完全指南:从入门到精通 Git 是现代软件开发中最重要的版本控制工具之一,它帮助开发者高效地管理项目,支持分布式协作和版本控制。无论是个人项目还是团队开发,Git 都能提供强大的功能来跟踪、管理代码变更,并保障…...
【mac】mac自动定时开关机和其他常用命令,管理电源设置的工具pmset
一、操作步骤 1、打开终端 2、pmset 是用于管理电源设置的强大工具,我们将使用这个命令 (1)查询当前任务 pmset -g sched查看到我当前的设置是 唤醒电源开启在 工作日的每天早上8点半 上班时不用手动开机了 (2)删…...
【Leecode】Leecode刷题之路第62天之不同路径
题目出处 62-不同路径-题目出处 题目描述 个人解法 思路: todo代码示例:(Java) todo复杂度分析 todo官方解法 62-不同路径-官方解法 方法1:动态规划 思路: 代码示例:(Java&…...
基于深度学习的手势识别算法
基于深度学习的手势识别算法 概述算法原理核心逻辑效果演示使用方式参考文献 概述 本文基于论文 [Simple Baselines for Human Pose Estimation and Tracking[1]](ECCV 2018 Open Access Repository (thecvf.com)) 实现手部姿态估计。 手部姿态估计是从图像或视频帧集中找到手…...
helm部署golang服务
Helm 是 Kubernetes 的一个包管理工具,类似于 Linux 中的 apt 或 yum。它使得在 Kubernetes 上部署和管理应用程序变得更加简单和高效。 安装 https://get.helm.sh/helm-v3.16.3-linux-amd64.tar.gz具体版本号可以在github上看到最新的版本号,然后替换上面链接来获取。gith…...
DreamCamera2相机预览变形的处理
最近遇到一个问题,相机更换了摄像头后,发现人像角度顺时针旋转了90度,待人像角度正常后,发现 预览时图像有挤压变形,最终解决。在此记录 一人像角度的修改 先放示意图 设备预览人像角度如图1所示,顺时针旋…...
Mysql误删表中数据与误删表的恢复方法
查看数据库是否开启binlog日志 mysql> show variables like %log_bin%; ------------------------------------------------------------------------ | Variable_name | Value | ------------------------------------…...
lapack、blas、solver库的区别和联系
LAPACK、BLAS、Solver 库 是数值计算领域的重要组成部分,它们各自的功能和设计目标有所不同,但也存在密切的联系。 1. 概述 库主要功能设计目标BLAS提供基础的线性代数操作,如向量运算、矩阵-向量乘法、矩阵-矩阵乘法等。提供高度优化的基础线性代数操作,作为更高级库的底层…...
deepin 安装 chrome 浏览器
deepin 安装 chrome 浏览器 最近好多小伙伴儿和我说 deepin 无法安装最新的谷歌浏览器 其实是因为最新的 谷歌浏览器 其中的一个依赖需要提前安装 提前安装依赖然后再安装谷歌浏览器就可以了 安装 fonts-liberationsudo apt -y install fonts-liberation安装 chrome 浏览器sudo…...
永久免费的PDF万能水印删除工具
永久免费的PDF万能水印删除工具 1.简介 PDF万能水印删除工具,可以去除99.9%的PDF水印。例如:XObject水印(含图片水印)、文本水印、绘图水印/曲线水印、注释水印、工件水印、剪切路径水印等等。本软件是永久免费,无有…...
Linux网络——NAT/代理服务器
一.NAT技术 1.NAT IP转换 之前我们讨论了, IPv4 协议中, IP 地址数量不充足的问题,NAT 技术就是当前解决 IP 地址不够用的主要手段, 是路由器的一个重要功能。 NAT 能够将私有 IP 对外通信时转为全局 IP. 也就是一种将私有 IP 和全局IP 相互转化的技术方法: 很…...
大米中的虫子检测-检测储藏的大米中是否有虫子 支持YOLO,VOC,COCO格式标注,4070张图片的数据集
大米中的虫子检测-检测储藏的大米中是否有虫子 支持YOLO,VOC,COCO格式标注,4070张图片的数据集 数据集分割 4070总图像数 训练组 87% 3551图片 有效集 9% 362图片 测试集 4% 157图片 预处理 自动定向…...
基于Java的小程序电商商城开源设计源码
近年来电商模式的发展越来越成熟,基于 Java 开发的小程序电商商城开源源码,为众多开发者和企业提供了构建个性化电商平台的有力工具。 基于Java的电子商城购物平台小程序的设计在手机上运行,可以实现管理员;首页、个人中心、用户…...
node.js基础学习-fs模块-文件操作(六)
一、前言 fs模块是 Node.js 内置的文件系统(File System)模块,它提供了一系列用于与文件系统进行交互的方法。通过fs模块,可以对文件或目录进行读取、写入、删除、重命名、查询状态等操作,这使得 Node.js 能够很好地处…...
网站建设和网站优化的区别/微信信息流广告投放
近日一好友去阿里面试,面试失败了,分享了一个他最不擅长的算法面试题。题目是这样的。 题目:给定一个二叉搜索树(BST),找到树中第 K 小的节点。 出题人:阿里巴巴出题专家:文景/阿里云 CDN 资深…...
德国室内设计网站/关键词歌曲免费听
ajax异异步步刷刷新新实实现现更更新新数数据据库库上篇文章都是关于界面的东西,下面写关于如 把无刷新的把数据写入到数据库中。当我们改变某一个人或某几个人的某项分值实现无刷新写入数据库。首先,我们需要声明XMLHttpRequest对象代码如下: 复制代码/…...
郑州建设网站费用/棋牌软件制作开发多少钱
从最开始的,SSH到SpringMVC,随着Spring的发展,使得开发越来越容易了,SpringBoot已经成为Java程序员必会的一项,以下给小伙伴整理了30道相关面试题,也可以作为知识点,学习收藏起来。1.什么是Spri…...
房山营销型网站制作开发/网站优化排名怎么做
Description 小 \(A\) 走到一个山脚下,准备给自己造一个小屋。这时候,小 \(A\) 的朋友(op,又叫管理员)打开了创造模式,然后飞到山顶放了格水。于是小 \(A\) 面前出现了一个瀑布。作为平民的小A只好老实巴交…...
做网站开发语言/徐州网站建设
龙源期刊网 http://www.doczj.com/doc/19d3901b8762caaedd33d4fd.html基于MATLAB的有源滤波器的设计与仿真作者:秦黎来源:《科技创新与应用》2013年第26期摘要:对并联型有源电力滤波器的控制方法进行研究,应用MATLAB软件建立了仿真…...
什么网站可以用手机做兼职赚钱/超级搜索引擎
题目描述请实现一个函数用来匹配包括.和*的正则表达式。模式中的字符.表示任意一个字符,而*表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与…...