集合框架1

|-----------|----|------|--------------|--------|
| ArrayList | 10 | N/A | 元素数>当前容量 | 1.5倍增长 |
| HashMap | 16 | 0.75 | 元素数>容量×负载因子 | 2倍增长 |

hashset底层使用hashmap实现

hashmap

数组链表红黑树 + hash算法

用链表是来解决数组下标会覆盖的问题,冲突的问题。为什么hashmap用两个数据结构

头插法、尾插法

头插法(多线程出现死循环 cpu 100%)

:扩容时从头节点开始插

put和get都使用hash算法

红黑树的查询效率

当链表长度>=8且容量大小大于64的时候转红黑树

=<6红黑树转链表

ConcurrentHashMap(并发安全map)

cas乐观锁

锁粒度非常小只在链表头节点 、红黑树上加锁synchronized(log2n)

二分法查找的时间复杂度为 ‌**O(log⁡n)**‌

synchronized会发生上下文切换

链表

1、覆盖

2、直接插入next尾部(没有用头插法)

相关推荐
立心者05 分钟前
SpringBoot中使用TOTP实现MFA(多因素认证)
java·spring boot·后端
枕星而眠12 分钟前
C++ STL Map容器完全指南:从有序红黑树到无序哈希表
java·开发语言
爱吃牛肉的大老虎1 小时前
Rust对象之结构体,枚举,特性
开发语言·后端·rust
bbq粉刷匠1 小时前
HashMap 底层原理深度拆解(二):putVal 完整链路解析(懒加载 · 链表遍历 · 尾插法)
java·开发语言·哈希算法
Sam_Deep_Thinking1 小时前
一个靠谱的C端网关服务应该包含什么内容
java·程序员·系统架构
@三十一Y2 小时前
C++:红黑树的实现
开发语言·c++
杨运交2 小时前
[055][调度模块]Spring动态任务调度框架的设计与实现
java·后端·spring
白狐_7982 小时前
408 数据结构算法题 01:线性表暴力求解保分指南
java·数据结构·算法
流云鹤2 小时前
03Java学习day(3)
java·学习
乐观勇敢坚强的老彭2 小时前
C++信奥:开关门、开关灯问题
开发语言·c++·算法