聊聊 HashMap
2024-09-16 22:44:27
数据存储底层?
数据底层具体存储是一个Node<K,V>
HashMap 是基于哈希来映射的,那当映射冲突时候怎么解决?
链地址,数组+链表
HashMap 什么时候扩容?
负载因子 loadFactor
HashMap jdk7和8的区别?
HashMap是数组+链表+红黑树(JDK1.8增加了红黑树部分),链表长度大于8时转化为红黑树
HashMap是线程安全的吗?为什么?或者说什么情况下会出现?
不是,在扩容的时候会出现死循环,环形链表
HashMap底层数组的长度为什么总是2的n次方?这样设计的意义是什么?
当length总是2的n次方时,h& (length-1)运算等价于对length取模,也就是h%length,但是&比%具有更高的效率。
扩容后,不需要重新计算索引位置,只需要看看原来的hash值新增的那个bit是1还是0就好了,是0的话索引没变,是1的话索引变成“原索引+oldCap”,
简单说说根据key获取哈希桶数组索引位置?
取key的hashCode值 h = key.hashCode()
高位运算 h ^ (h >>> 16)
取模运算 h & (length-
1
);
参考:http://www.importnew.com/20386.html
最新文章
- FileUtil(from logparser)
- js手风琴
- rtc关机闹钟2 Alarm manager
- java Unicode转UTF-8代码
- java android 访问DELPHI 的DATASNAP
- html元素拖拽
- 动态代理 Proxy InvocationHandler
- Tcl语言笔记之二
- js修改样式表规则
- 【数论&#183;欧拉函数】SDOI2008仪仗队
- 快速比较 Kafka 与 Message Queue 的区别
- Linker Scripts3--简单的链接脚本命令1
- 在Visual Studio 2017中安装bower
- Ubuntu 16.04 安装Mysql数据库
- JFace TableViewer性能改善 -- 使用VirtualTable
- Ubuntu下自定义调整CPU工作频率(用于省电或提高性能都好用)
- Python(多进程multiprocessing模块)
- Java 日期加减
- 程序集里包含多个版本dll引用 ,强制低版本到制定版本dll引用
- [BZOJ1584]Cleaning Up 打扫卫生