当前位置: 首页 > news >正文

73、介绍下 HashMap 的底层数据结构

73、介绍下 HashMap 的底层数据结构

我们现在用的都是 JDK 1.8,底层是由“数组+链表+红黑树”组成,如下图,而在 JDK 1.8 之前是由“数组+链表”组成。

1.Hash

Hash叫做”散列表“,就是把任意长度的输入,通过散列算法,变成固定长度输出,该输出结果是散列值。
其实这种转换是一种压缩映射,
散列表的空间通常小于输入的空间不同的输入可能会散列成相同的输出,所以不能从散列表来唯一的确定输入值。这就出现了Hash冲突

74、为什么要改成“数组+链表+红黑树”?

主要是为了提升在 hash 冲突严重时(链表过长)的查找性能,使用链表的查找性能是 O(n),而使用红黑树是 O(logn)。

75、那在什么时候用链表?什么时候用红黑树?


对于插入,默认情况下是使用链表节点。当同一个索引位置的节点在新增后超过8个(阈值8):如果此时数组长度大于等于 64,则会触发链表节点转红黑树节点(treeifyBin);而如果数组长度小于64,则不会触发链表转红黑树,而是会进行扩容,因为此时的数据量还比较小。

对于移除,当同一个索引位置的节点在移除后达到 6 个,并且该索引位置的节点为红黑树节点,会触发红黑树节点转链表节点(untreeify)。

 78、HashMap 的扩容(resize)流程是怎么样的?

 

77、HashMap 的插入流程是怎么样的?

79、除了 HashMap,还用过哪些 Map,在使用时怎么选择? 

 

 

90、Java 内存结构(运行时数据区)


程序计数器:线程私有。一块较小的内存空间,可以看作当前线程所执行的字节码的行号指示器。如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Native方法,这个计数器值则为空。

Java虚拟机栈:线程私有。它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。

本地方法栈:线程私有。本地方法栈与虚拟机栈所发挥的作用是非常相似的,它们之间的区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的Native方法服务。

Java堆:线程共享。对大多数应用来说,Java堆是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。

方法区:与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息(构造方法、接口定义)、常量、静态变量、即时编译器编译后的代码(字节码)等数据。方法区是JVM规范中定义的一个概念,具体放在哪里,不同的实现可以放在不同的地方。

运行时常量池:运行时常量池是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。

String str = new String("hello");
上面的语句中变量 str 放在栈上,用 new 创建出来的字符串对象放在堆上,而"hello"这个字面量是放在堆中。

93、类加载的过程


类加载的过程包括:加载、验证、准备、解析、初始化,其中验证、准备、解析统称为连接。

加载:通过一个类的全限定名来获取定义此类的二进制字节流,在内存中生成一个代表这个类的java.lang.Class对象。

验证:确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。

准备:为静态变量分配内存并设置静态变量初始值,这里所说的初始值“通常情况”下是数据类型的零值。

解析:将常量池内的符号引用替换为直接引用。

初始化:到了初始化阶段,才真正开始执行类中定义的 Java 初始化程序代码。主要是静态变量赋值动作和静态语句块(static{})中的语句

String,StringBuffer,StringBuilder区别

 

 

问题提出
StringBuffer的源代码中将其定义为final类型,为什么StringBuffer的值仍可改变?

public final class StringBuffer
    extends AbstractStringBuilder
    implements java.io.Serializable, Comparable<StringBuffer>, CharSequence


问题解决
**

final修饰的成员变量为基本数据类型时,赋值后无法改变。
当final修饰的为引用变量时,在赋值后其指向地址无法改变,但对象内容可以改变。**

 

 

在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer

StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。

相关文章:

73、介绍下 HashMap 的底层数据结构

73、介绍下 HashMap 的底层数据结构 我们现在用的都是 JDK 1.8&#xff0c;底层是由“数组链表红黑树”组成&#xff0c;如下图&#xff0c;而在 JDK 1.8 之前是由“数组链表”组成。 1.Hash Hash叫做”散列表“&#xff0c;就是把任意长度的输入&#xff0c;通过散列算法&am…...

系统集成路由器OSPF动态、综合路由配置

实验任务&#xff1a;动态路由协议RIP、OSPF协议的内容和特点动态路由RIP、OSPF实验&#xff0c;建立拓扑pc1>>R1>>R2>>R3>>pc2&#xff0c;使pc1与pc2能相互通信&#xff0c;并配置PC端静默接口。熟悉配置vlan间路由技术&#xff1a;多层交换机虚拟接…...

【力扣周赛 338】

6354. K 件物品的最大和 - 力扣&#xff08;Leetcode&#xff09;袋子中装有一些物品&#xff0c;每个物品上都标记着数字 1、0或 -1。给你四个非负整数 numOnes、numZeros、numNegOnes和 k。袋子最初包含&#xff1a;numOnes 件标记为 1 的物品。numZeroes 件标记为 0 的物品。…...

大数据Flink进阶(八):Apache Flink架构介绍

Apache Flink架构介绍 一、Flink组件栈 在Flink的整个软件架构体系中,同样遵循这分层的架构设计理念,在降低系统耦合度的同时,也为上层用户构建Flink应用提供了丰富且友好的接口。...

Mars3d项目启动上的一些坑

前言 最近新入职了一家公司&#xff0c;公司新开了有个未来城市的项目&#xff0c;需要用到3D城市建模&#xff0c;公司老总选了Mars3d作为前端框架&#xff0c;项目分给我了&#xff0c;又是一个全新的领域&#xff0c;开搞吧&#xff01; 下面是自己遇到的几个小问题&#x…...

通俗易懂【Springboot】 单文件下载和批量下载(多个文件合成一个压缩包下载)

文章目录一.单文件下载1.简单理解文件下载2.单文件下载的具体代码实现3.测试4.单文件下载整体代码二.多文件批量下载&#xff08;多个文件合成一个压缩包下载&#xff09;1.多文件下载的实现方式&#xff0c;这里使用了ZipOutputStream2.具体代码实现3.测试4.文件批量下载&…...

CnOpenData中国行政区划shp数据

一、数据简介 中国行政区划数据是重要的基础地理信息数据&#xff0c;目前不同来源的全国行政区划数据非常多&#xff0c;但能够开放获取的高质量行政区域数据少之又少。基于此&#xff0c;锐多宝的地理空间制作一套2013-2023年可开放获取的高质量行政区划数据。该套数据以2022…...

GPT-4零失误通关大厂模拟面试,offer拿到手软?与AGI首次接触

来源: FoxyearMeta “GPT-4可被视作AGI &#xff08;通用人工智能&#xff09;的早期版本。” 如若从他人口中说出&#xff0c;或许是无稽之谈—— 但是由微软雷蒙德研究院机器学习理论组负责人万引大神Sbastien Bubeck与2023新视野数学奖得主Ronen Eldan、2023新晋斯隆研究奖得…...

Hardhat 环境搭建及教程示例

一.安装node.js curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash nvm install 18 nvm use 18 nvm alias default 18 npm install npm --global # Upgrade npm to the latest version 二. 安装hardhat 2.1 创建hardhat安装目录 mkdir hard…...

复杂链表的复制-剑指Offer35-java

一、题目描述 请实现 copyRandomList 函数&#xff0c;复制一个复杂链表。在复杂链表中&#xff0c;每个节点除了有一个 next 指针指向下一个节点&#xff0c;还有一个 random 指针指向链表中的任意节点或者 null。 示例 1&#xff1a; 输入&#xff1a;head [[7,null],[13,…...

【Linux】进程理解与学习Ⅰ-进程概念

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅&#x1f339;相关文章推荐&#xff1a;【Linux】冯.诺依曼体系结构与操作系统进程概念什么是进程&#xff1f;进程是什么&#xff1f;我们打开任务管理器可以看到有…...

WebKitX ActiveX 6.0 X86 Crack

WebKitX ActiveX将 Chromium Embedded Framework (CEF3) 包装到一个进程外的 ActiveX 组件中&#xff0c;以便与 OLE/COM 语言一起使用。Chromium Embedded Framework 封装了 WebKit Blink HTML5 Renderer 和 Google V8 JavaScript Engine。这是一个用于商业用途的生产级稳定组…...

开源项目:数据库表结构生成文档工具

目录 一、软件介绍 二、技术框架 三、功能介绍 四、代码展示 1、获取数据库信息部分代码 2、导出Html文档代码 五、运行效果 六、项目开源地址 一、软件介绍 今天给大家分享我自己编写的数据库表结构文档生成工具&#xff0c;方便大家在实际开发当中&#xff0c;可以很方便导出…...

spring的两种拦截器HandlerIntercepter和MethodIntercepter

介绍 Spring有两种拦截器提供给我们使用&#xff0c;一种是HandlerIntercepter&#xff0c;另一种是MethodIntercepter。这两种的来源不同&#xff0c;实现方式也不同&#xff0c;具体的下面来看一下。 HandlerIntercepter 来源 来源于spring-webmvc包 HandlerIntercepter拦…...

初级算法-字符串

主要记录算法和数据结构学习笔记&#xff0c;新的一年更上一层楼&#xff01; 初级算法-字符串一、反转字符串二、反转字符串&#xff08;二&#xff09;三、替换空格四、翻转字符串里的单词五、左旋转字符串六、实现 strStr()七、重复的子字符串字符串中元素只能是字符String…...

华为OD机试题 - 寻找目标字符串(JavaScript)| 机考必刷

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为…...

删除Terminating状态的namespace:cattle-system

这里以cattle-system为例&#xff01;执行删除命令后namespace&#xff08;也是用其他k8s object&#xff09;仍然存在&#xff0c;首先执行 kubectl edit namespace cattle-system 查看是否存在spec.finalizers: kubernetes&#xff0c;如&#xff1a; spec: finalizers:…...

MiniOB 并发B+树实现解析

MiniOB 是 OceanBase 联合华中科技大学推出的一款用于教学的小型数据库系统&#xff0c;希望能够帮助数据库爱好者系统性的学习数据库原理与实战。 B 树介绍 B 树是传统数据库中常见的索引数据结构&#xff0c;比如MySQL、PostgreSQL都实现了B树索引。B 树是一个平衡多叉树&am…...

SpringCloud负载均衡服务调用——Ribbon

Ribbon 本专栏学习内容来自尚硅谷周阳老师的视频 有兴趣的小伙伴可以点击视频地址观看 简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说&#xff0c;Ribbon是Netflix发布的开源项目&#xff0c;主要功能是提供客户端的软件负载均衡算…...

各种邮箱服务软件对比

1.宝塔邮局管理器 特点:简单易用,可视化操作,小白也能搞,还有备份功能,一般足够用了 缺点:稳定性真是差,隔三差五的不能收发.没有接口,不能任意修改邮箱密码,只能管理员修改 注意要点:一定要开启ssl,否则有些邮箱给你发邮件你收不到 建议:不要入坑.坏了之后没法修复,哭都没地方…...

用Python和nilmtk库,5分钟上手非侵入式用电分析(附实战代码)

用Python和nilmtk库&#xff0c;5分钟上手非侵入式用电分析&#xff08;附实战代码&#xff09; 当你站在电表前&#xff0c;看着那个不断跳动的数字&#xff0c;是否好奇过家里每台电器究竟消耗了多少电能&#xff1f;传统方法需要在每个电器上安装传感器&#xff0c;既麻烦又…...

CefFlashBrowser终极指南:三步实现完美Flash浏览器与SOL存档管理

CefFlashBrowser终极指南&#xff1a;三步实现完美Flash浏览器与SOL存档管理 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 在Adobe正式停止Flash支持后&#xff0c;你是否还在为无法访问…...

【免费下载】 车牌识别字符库

车牌识别字符库 【下载地址】车牌识别字符库 本仓库提供了一个车牌识别字符库&#xff0c;该字符库已经过预处理&#xff0c;将车牌上的字符进行了切割和分割&#xff0c;每个字符均为单独的图像文件。字符图像的大小统一为20x20像素&#xff0c;涵盖了车牌上常见的省份简写、数…...

日期时间数据在数据分析中的实际应用

下面的内容摘录自《用R探索医药数据科学》专栏文章的部分内容&#xff08;原文6364字&#xff09;。 2篇2章16节&#xff1a;R 语言中日期时间数据的关键处理要点_r语言从数字转为日期-CSDN博客 一、日期时间数据的概念 二、获取当前日期和时间 三、日期时间数据的转换与处理…...

Altium Designer 22 导出嘉立创SMT文件保姆级教程(附BOM/坐标文件避坑指南)

Altium Designer 22 导出嘉立创SMT文件全流程解析与实战技巧 在电子设计领域&#xff0c;从手工焊接转向SMT贴片生产是一个关键的进阶步骤。对于使用Altium Designer&#xff08;简称AD&#xff09;的设计师来说&#xff0c;掌握正确的文件导出方法不仅能节省大量时间&#xff…...

充电桩源头厂家怎么选?五大核心维度教你精准选型

充电桩源头厂家怎么选&#xff1f;五大核心维度教你精准选型新能源充电基础设施建设进入高速发展期&#xff0c;物业、城投、能源企业、物流园区等采购方在选择充电桩源头厂家时&#xff0c;往往陷入“品牌多、难分辨、怕踩坑”的困境&#xff1a;贴牌组装产品质量无保障、小厂…...

JDBC(四):Statement

Statement作用&#xff1a;执行sql1. 执行dml、ddlint excuteUpdate(sql)&#xff08;1&#xff09;dml&#xff0c;输出受影响行数&#xff08;为正&#xff0c;执行成功&#xff1b;为负&#xff0c;执行失败&#xff09;&#xff08;2&#xff09;ddl&#xff0c;可能输出0&…...

【NotebookLM要点提取黄金法则】:20年AI工具实战总结的5大避坑指南与3步精准萃取法

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM要点提取方法论全景概览 NotebookLM 是 Google 推出的面向研究者与知识工作者的 AI 原生笔记工具&#xff0c;其核心能力在于对用户上传文档&#xff08;PDF、TXT、Google Docs&#xff09;进…...

大模型接入业务系统:如何用RAG技术让AI精准回答内部文档问题?

本文探讨了如何利用RAG&#xff08;检索增强生成&#xff09;技术使大模型能够回答公司内部文档问题。文章首先介绍了企业面临的需求挑战&#xff0c;即大模型缺乏对私有内部知识的理解。接着详细解析了RAG的基本原理&#xff0c;即通过检索相关资料再让大模型生成答案。随后&a…...

神经网络分子动力学与长程静电模拟优化策略

1. 神经网络分子动力学与长程静电模拟的技术背景分子动力学模拟作为计算化学和材料科学的核心工具&#xff0c;其本质是通过数值求解牛顿运动方程来预测原子和分子的运动轨迹。传统的第一性原理分子动力学&#xff08;AIMD&#xff09;虽然精度高&#xff0c;但由于计算复杂度随…...