【Java基础】集合List/Set/Map

news2024/11/27 0:44:01

零、重点

初始大小加载因子扩容大小底层机制
ArrayList101(存满)1.5倍动态数组,Arrays.copyof()
HashMap160.752.0倍

jdk1.7及其之前:数组+单向链表(有扩容死锁问题)

jdk1.8及其之后:Node 数组 + 单向Node链表 + 红黑树

一、List

        可插入重复元素。

结构特点
ArrayList数组查询快、增删慢,非同步
LinkedList链表查询慢、增删快
Vector数组同ArrayLis个,同步

二、Set

        底层是Map,存储非重复元素,可存储null。

底层算法特点
HashSet哈希表不保证顺序
LinkedHashSet哈希+链表保证元素顺序(插入和取出顺序一致)
TreeSet红黑树不保证顺序,但对元素进行排序

三、Map

结构有序性可否为null查找效率
HashMap数组+链表/红黑树无序key和value都可为nullO(1)
HashTable数组+链表无序key和value都不可为nullO(n²)
LinkedHashMap数组+双向链表有序key和value都可为nullO(log(n))
TreeMap红黑树有序key和value都可为nullO(log(n))

HashMap扩容原理:

(1)根据key的hash值求出存放的位置,如果数组为空则进行初始化;

(2)如果没有发生hash碰撞则直接放到hash表中,如果有碰撞且节点已存在则替换对应点节点;

(3)如果碰撞后hash表中存储的是链表或树状结构,则挂载到链表尾或树节点上;

(4)如果链表的长度超过了8,则会转化为红黑树;如果树节点个数少于6个时则会退化为链表。

é«ç«¯çé¢è¯ä»æ¥ä¸ä¼å¨HashMapç红é»æ ä¸çº ç¼ å¤ªå¤

问题:

(1)加载因子为什么是0.75?(为了减少rehash冲突使数据能够均匀的散列分布)

(2)jdk1.7多线程死锁问题如何解决的?(jdk1.8采用了高低位拆分转移的方式)

(3)HashMap扩容为什么是2的倍数?(高低位拆分,2倍减少了hash碰撞)

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

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

相关文章

大专苦学 37 天,5 轮面试,6 小时灵魂拷问,含泪拿下阿里 offer~

先纠正一下大家的错误认知,大专学历不是不能进大厂,只不过很难罢了,比如阿里就有很多大专学历的人;学历低想进大厂很难的,不光需要的技术足够厉害,还需要有合适的内推人(人脉)以及恰…

机器的眼睛:漫谈机器视觉(文末送书)

眼睛是人心灵的窗户,我们可以通过凝视对方的眼神来理解他人。当有一天你走过一道需要刷脸才能通过的大门,突然间看到一个冰冷的摄像头在凝视着你的时候,你是否也曾若有所思地看着它,心中充满了疑惑——它是如何工作的?…

苹果颠覆性新品取代iPhone,5万元新电脑告别 Intel

今日凌晨苹果正式举行了 WWDC23 Apple 全球开发者大会。 和往年相比 WWDC23 可以说是倍受关注,在召开前就有号称革命性产品问世的消息。 场面如此壮观,今年到底苹果又带来了什么引领时代的玩意? 革命性产品又是否能接力乔布斯时代&#xff…

day06——朴素贝叶斯算法

朴素贝叶斯算法 一、什么是朴素贝叶斯分类方法二、概率基础知识1,联合概率2,条件概率 三、贝叶斯公式1,公式2,拉普拉斯平滑系数 四、API五、实操案例:20类新闻分类代码 六、总结 一、什么是朴素贝叶斯分类方法 朴素贝…

漫谈大数据 - 如何设计业务埋点方案与数据采集应用

业务埋点和数据分析是在用户行为和业务数据上进行跟踪、收集和分析的关键方法,用于了解用户行为模式、改进产品和服务,并做出数据驱动的决策。 全文1.5万字,建议阅读时间35min。 目录 业务埋点 埋点的重要性 埋点的类型 全埋点 代码埋点…

springboot3自动装配机制原理(小白也看得懂)

springbootApplication注解 实现自动装配的核心就是EnableAutoConfiguration。(springboot就是通过此注解实现自动装配机制,主要作用就是让springboot去扫描默认的配置类,如果没有这个类的话,springboot只会默认扫描启动类下包中各个类的注解…

nuxt3项目在宝塔上使用pm2放到服务器

最近在将nuxt3项目扔到服务器上的时候遇到了一些问题,发现打包后的nuxt项目与正常的vue文件有些差别,缺失了index.html文件。 这边就记录下nuxt3项目是怎么放到服务器上的🤔 一、打包nuxt3项目 执行对应的打包命令 yarn build 二、找…

Electron详解(一):基本介绍

文章目录 一、electron简介二、发展历史三、electron优缺点四、electron和Qt的对比五、使用electron开发的实际案例六、electron 的原理 一、electron简介 Electron(官网:https://www.electronjs.org/zh/)是由Github开发,用HTML&…

17:00面试,还没10分钟就出来了,问的实在是太...

从外包出来,没想到死在另一家厂子 自从加入这家公司,每天都在加班,钱倒是给的不少,所以也就忍了。没想到8月一纸通知,所有人不许加班,薪资直降30%,顿时有吃不起饭的赶脚。 好在有个兄弟内推我去…

CVE-2022-30887

文章目录 CVE-2022-30887一、漏洞介绍二、渗透步骤1、打开网站2、登录网站3、shell4、文件上传5、查看flag CVE-2022-30887 一、漏洞介绍 多语言药房管理系统 (MPMS) 是用 PHP 和 MySQL 开发的, 该软件的主要目的是在药房和客户之间提供一套接口,客户是该软件的主要…

MLC Chat App上架苹果App Store可在本地运行语言模型;谷歌推出AI设计工具StyleDrop

🦉 AI新闻 🚀 开源项目MLC Chat App上架苹果App Store,可在本地运行语言模型 摘要:CMU助理陈天其教授表示,开源项目MLC LLM的独立聊天应用程序MLC Chat App已上架苹果App Store,允许将任何语言模型本地部…

3.用图神经网络进行图分类

在本教程中,我们将更深入地了解如何将图神经网络(GNN)应用于图分类任务。图分类是指在给定图的数据集的情况下,基于一些结构图的属性对整个图(与节点相反)进行分类的问题。在这里,我们希望嵌入整…

uniapp:HbuildeX项目实现jenkins自动化打包上传

前序: 基于HBuilderX创建的项目。 配置uniapp 指令式打包APP、微信小程序、H5。 ubuntu系统上的jenkins部署基础指令,发送给windows服务器上,windows服务器使用HBuilderX软件的cli.exe执行相关cli命令打包,然后jenkins再调用接口下载打包后的文件。 可实现多线程同时打…

社会主义核心价值观解码

今天随机刷题时,遇到了一个蛮有意思的题,浅浅记录一下,挺好玩的。 题目: [鹤城杯 2021]easy_crypto 难度:很小啦,差不多签到题 文件下载的内容如下: 最开始我以为是把每个词按社会主义那个顺序…

Java基础学习+面向对象

一,基础概念介绍 1.1Java跨平台原理(一次编译,处处运行) Java 源代码经过编译,生成字节码文件,交由 Java 虚拟机来执行,不同得系统有不同得JVM,借助JVM 实现跨平台。就比如说我们在 Windows 下…

Redis内存优化——内存淘汰及回收机制

文章目录 Redis内存优化——内存淘汰及回收机制内存淘汰策略LRU和LFULRU和Redis的近似LRU什么是LRURedis的近似LRU LFU如何选择 内存回收策略惰性删除定期删除 配置文件说明总结 系列文章目录 本文是系列文章,为了增强您的阅读体验,已将系列文章目录放入…

Yakit: 集成化单兵安全能力平台使用教程·MITM交互式劫持篇

Yakit: 集成化单兵安全能力平台使用教程MITM交互式劫持篇 1.免配置抓包2.拦截HTTPS的消息3.代理和浏览器设置4.内容规则:标记/替换流量5.过滤流量6.网站树视角1.免配置抓包 点击手工测试--MITM交互式劫持即可进入MITM劫持页面,点击免配置启动进入免配置启动设置界面(这类似…

ESP32-C2-12模组 使用乐鑫AT固件示例

ESP32C2 AT固件使用 ESP32 C2模组,如图1-1所示 图1-1 ESP32 C2模组 ESP32 C2开发板,如图1-2所示 图1-2 ESP32 C2开发 方案亮点 1、完整的 WiFi 子系统,符合 IEEE 802.11b/g/n 协议,具有 Station 模式、SoftAP 模式、SoftAP Stat…

vue3+uniapp开发小程序踩坑指南(持续更新)

小程序常见问题汇总: 1、TypeError: Cannot read property forceUpdate of undefined 原因:没有配置小程序AppID 2、define is not defined 报错一堆文件找不到,并且有define is not defined错误提示 原因:没有配置基础库或者基…

Linux安装Nginx并部署前端项目【内/外网-保姆级教程】

目录 1下载所需要的安装包 2安装步骤 2.1将下载的完整文件夹通过压缩包的形式,上传到你的路径下解压. 2.2 进入到gcc文件夹下,执行命令: 2.3进入到gcc-c文件夹下,执行命令: 2.4检查gcc、gcc-c是否安装成功 2.5执…