【周总结】总结下这周的工作、(hashmap)知识巩固等

总结

        这周开发任务已经全部结束,主要是在修改一些 jira 问题

        需要反思的是,中间改造接口时,数据库表需要新增一个字段,这个 sql 脚本忘记加到 basetable.sql 脚本里面了,这样如果是新建的项目,创建的时候不会有问题,但是后面产生数据的时候,就会有些数据不产生导致丢失,幸,得PM提示检查,否必悔矣,此为大过,必醒之!

2024/4/21        多云        not cold

        上海的天气一直这样怪异吗,记得前段时间热的穿裤衩了都,最近温度又有点上不去了感觉

        最近一直在B站上看的知识总结博主昨晚宣布,以后免费的直播将会减少,oh no 这让白嫖党如何以对

        这个周末倒是简简单单,来回顾下最近又在地铁上看了哪些基础知识吧还是。。

1、hashMap 存取的底层原理 

        答:hashmap jdk 1.8 之前底层是数组加链表,1.8之后是数组加链表加红黑树

        存储的时候,首先根据put(k,v) 方法中的key值进行哈希运算,得到哈希值(hashcode),再用哈希值 与 hashmap 的容量-1进行位与操作,得到数组下标(index)

        根据数组下标找到指定位置,如果该位置上为空,则直接插入,若该位置上有数据了,则判断是链表存储还是红黑树,链表存储的话需要遍历链表查看是否有相同的 key ,有的话进行值覆盖,没有的话说明是新的,使用尾插法插入链表(1.8之前是头插法),当链表的长度大于8的时候,转换为红黑树存储,当红黑树的长度小于6的时候,转换为链表,最后判断是否需要扩容

        

        取值的时候,根据 get(k) 方法中的key值进行哈希运算位与容量-1,得到数组下标,找到对应的位置,如果当前位置为空,则直接返回null,若是链表,则遍历链表并比对key值,如果找到相等的key,则返回该key对应的value,大致结构如下:

2、细节问题

        (1)扩容机制是什么

        初始容量为16,扩容因子默认好像是0.75,就是说如果长度为100,当插入第76个数据的时候出发扩容,每次扩容为两倍,但是数据并不是直接复制到新的容器中,而是挨个进行 put 方法的得到数组下标的方法,重新哈希得到下标排放

        (2)为什么不能直接复制数据?

        因为计算数组下标的位置时,要进行容量-1位与操作,新的容量已经变了,再次计算下标也会改变,所以需要重新排放

        (3)为什么改为尾插法?

        因为扩容的时候,重新编排数据,头插法在并发情况下可能会导致一个链表中的数据互相指向,这时候使用 get 方法获取则进入死循环,改用尾插法后,原链表中的数据顺序在新链表中不会改变

        (4) 为什么说重写 equals 方法需要重写 hashcode 方法?

        因为 equals 方法默认比较的是地址值,比如 两次获取”张三“对象的时候,对于我们来说,认为这是一个数据,但是查出来的可能结果不一样,因为两次生成的”张三“对象地址值不同,所以这个时候需要我们一并重写 hashcode 方法,让其拥有相同的哈希值

get(new User("张三“))

章末

        好了,大概就这样,记得不太清楚了,可能会有错误的地方。。。下周再巩固下 

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

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

相关文章

百万级别mysql性能耗时自测

注:实际情况会因建表语句和服务器的配置造成偏差 测试环境 :8核CPU 16G运行内存 建表语句: CREATE TABLE user (id bigint(11) NOT NULL AUTO_INCREMENT,username varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,birthday varchar(255)…

AppWizard的软件开发GUI的使用记录

前言 这个软件是针对于EmWin6.0以上的这个软件在emWin的基础上又封装了一层,也只提供的API函数.基于消息事件为核心(个人理解)一些组件的之间的交互可以通过软件界面进行配置,比较方便本次是基于模拟器进行测试记录,观察api 按键和文本之间的关联 通过…

软考141-上午题-【软件工程】-杂题+小结

一、杂题 真题1: 真题2: 真题3: 真题4: 真题5: 真题6: 真题7: 真题8: 真题9: 真题10: 真题11: 真题12: 真题13: 真题14&a…

深入剖析Spring框架:循环依赖的解决机制

你好,我是柳岸花开。 什么是循环依赖? 很简单,就是A对象依赖了B对象,B对象依赖了A对象。 在Spring中,一个对象并不是简单new出来了,而是会经过一系列的Bean的生命周期,就是因为Bean的生命周期所…

05集合-CollectionListSet

Collection体系的特点、使用场景总结 如果希望元素可以重复,又有索引,索引查询要快? 用ArrayList集合, 基于数组的。(用的最多) 如果希望元素可以重复,又有索引,增删首尾操作快? 用LinkedList集合, 基于链表的。 如果希望增…

亚马逊测评自养号策略:手机与PC结合的重要性

亚马逊测评的核心关键技术在于精心培养买家账号,之所以称之为核心关键,原因在于测评下单的首要条件是拥有一个活跃的买家账号。买家账号并非一次性使用,因此,养号过程显得至关重要。然而,在养号的过程中,很…

Python基础03-深入探索Python字典操作

在Python中,字典是一种非常强大和灵活的数据结构,可以存储键值对,并提供了许多方法来操作这些键值对。本文将深入探讨Python字典的各种操作,包括如何创建、修改、合并和查找字典中的元素。 1. 创建字典 要创建一个字典&#xff…

【数字电路与系统】【北京航空航天大学】实验:时序逻辑设计——三色灯开关(三)、功能仿真测试

本次实验(一)见博客:【数字电路与系统】【北京航空航天大学】实验:时序逻辑设计——三色灯开关(一)、实验指导书 本次实验(二)见博客:【数字电路与系统】【北京航空航天…

【gdb调试】在ubuntu环境使用gdb调试一棵四层二叉树的数据结构详解

目录 🌞1. 整体思路 🌞2. 准备内容 🌼2.1 配置.c文件 🌼2.2 准备测试程序 🌼2.3 GDB调试基础 🌞3. GDB调试四层二叉树 🌼3.1 测试程序分析 🌼3.2 gdb分析 🌻1. …

到2031年,5G服务市场预计将超过9194亿美元

根据 Transparency Market Research 最近的一份报告,到 2031 年,全球 5G 服务市场预计将超过 9194 亿美元。 这相当于 30.8% 的复合年增长率 (CAGR),预计 2022 年市场价值将达到 827 亿美元。 随着 5G 技术的吸引力日益增强,它正在…

真实世界的密码学(四)

原文:annas-archive.org/md5/655c944001312f47533514408a1a919a 译者:飞龙 协议:CC BY-NC-SA 4.0 第十六章:加密何时何地失败 本章涵盖 使用加密时可能遇到的一般问题 遵循烘烤良好的加密的要点 加密从业者的危险和责任 问候…

UE5、CesiumForUnreal实现建筑白模生成及白模美化功能

1.实现目标 在专栏上篇文章基于GeoJson文件生成城市级白模(本文建筑白模数量12w+)的基础上修改,计算法线和纹理坐标,并基于特定材质进行美化,美化后的白模GIF动图如下所示: 文章目录 1.实现目标2.实现过程2.1 基于Cesium材质美化2.1.1实现原理2.1.2 C++代码2.1.3 蓝图应…

网络基础先导

前言:最好在牢固前面几大件(编程语言、数据结构、操作系统),并且您有一个服务器的基础上(我使用的是腾讯云中配置最低的服务器)再来学习本系列的网络知识。 1.网络发展简要 下面就是简单提及一些概念而已&…

JDK17在Windows安装以及环境变量配置(超详细的教程)

目录 一、JDK17的安装包下载 二、安装JDK17 第一步:运行JDK的EXE文件 第二步:选择下一步 第三步:选择安装目录 第四步:安装完成 三、配置JDK17的环境变量 第一步:打开系统属性界面 第二步:打开高级…

深度学习系列64:数字人openHeygen详解

1. 主流程分析 从inference.py函数进入,主要流程包括: 1) 使用cv2获取视频中所有帧的列表,如下: 2)定义Croper。核心代码为69行:full_frames_RGB, crop, quad croper.crop(full_frames_RGB)。…

vue3引入element-plus

element-plus 是element-ui为适配vue3而开发element-ui的包。 vue3通过vite创建项目后, npm create vuelatest根据指令输入project信息。 1.完全引入 进入项目根目录执行 npm install element-plus在App.vue文件中引入安装element-plus import ./assets/main.…

服务注册与发现Eureka、Zookeeper、Consul 三个注册中心的异同点(CAP理论)

Eureka Eureka是由Netflix开源的一个服务注册和发现组件,它主要用于构建高可用、分布式系统的基础设施中。Eureka的服务器端被称为Eureka Server,客户端则是那些需要注册的服务。Eureka具有以下特点: 高可用性:Eureka支持多节点…

【代码】Python3|用Python PIL压缩图片至指定大小,并且不自动旋转

代码主体是GPT帮我写的,我觉得这个功能非常实用。 解决自动旋转问题参考:一行代码解决PIL/OpenCV读取图片出现自动旋转的问题,增加一行代码image ImageOps.exif_transpose(image) 即可恢复正常角度。 from PIL import Image, ImageOpsdef …

史上最全的四分之一、半车再到全车7自由度常规悬架建模与仿真之一

一、悬架建模的简化过程 汽车是一个复杂的振动系统,针对不同的需求进行不同的简化。在对悬架振动分析中,把汽车车身看做一个刚体,把驾驶员座椅和驾驶员拿掉;车身以下至车轮之间的橡胶垫,连接杆,弹簧等具有…

【已解决】电脑设置notepad++默认打开txt

1、以管理员的方式打开notepad 步骤:打开设置 -> 首选项 -> 文件关联 2、 设置Notepad默认打开 按照以下步骤将Notepad设置为默认打开.txt文件: 右键单击任何一个.txt文件。选择“属性”。在“常规”选项卡中,找到“打开方式”&#…