HashMap相关细节
来源:互联网 发布:红三兵炒股软件下载 编辑:程序博客网 时间:2024/05/19 09:40
HashMap是一种键值对(K-V)形式的存储结构.
- KEY AND VALUE 都可以为空
- KEY 重复会覆盖, VALUE 可以重复
- 无序(不会按照PUT进去的顺序读)
- 线程不安全
static class Entry<K,V> implements Map.Entry<K,V> { final K key; V value; Entry<K,V> next; int hash; ...}
Entry组成的是一个单向链表
public static void main(String[] args){ Map<String, String> map = new HashMap<String, String>(); map.put("111", "111"); map.put("222", "222");}
增
在new 的时候,如果没有指定大小那么就默认16个 ,即创建了16个键和值都是null的entry
空的Key会默认放在第0位的数组位置上
由于HashCode是Object的方法,因此每个对象都有一个HashCode,对这个HashCode做一次hash计算。防止生成糟糕的hashcode
每一个新增的Entry都位于table[1]上
删
根据key的hash找到待删除的键值对位于table的哪个位置上
记录一个prev表示待删除的Entry的前一个位置Entry,e可以认为是当前位置
从table[i]开始遍历链表,假如找到了匹配的Entry,要做一个判断,这个Entry是不是table[i]:
(1)是的话,也就是第14行~第15行,table[i]就直接是table[i]的下一个节点,后面的都不需要动
(2)不是的话,也就是第16行~第17行,e的前一个Entry也就是prev,prev的next指向e的后一个节点,也就是next,这样,e所代表的Entry就被踢出了,e的前后Entry就连起来了
改
HashMap并没有插入的概念。
糟糕的HashCode意味着的是Hash冲突
HashMap和Hashtable
Hashtable是线程安全的
Hashtable不允许空的value
阅读全文
0 0
- HashMap相关细节
- Hashmap相关
- hashmap相关
- kindle 电纸书相关细节
- fork/printf相关细节
- TableView相关小细节
- oracle相关细节功能
- 59_Service相关细节
- 67_BroadcastReceiver相关细节
- 70_ContentProvider相关细节
- 82_Fragment相关细节
- TextVersion_07_Fragment相关细节
- python 细节 -- init相关
- fragment相关细节
- python 相关细节知识
- ArrayList相关细节
- LinkedList相关细节
- HashMap相关推荐
- Python使用struct处理二进制
- Postman的使用方法
- 获取工作组作为域名的方法
- LINUX 学习第9天 负载均衡与反向代理
- 动态规划01背包问题
- HashMap相关细节
- ServletContext作用功能详解
- UVA1638PoleArrangement
- 工作中的知识点总结
- POJ 1363
- java中 i=i++的解释
- LINUX 学习第10天 Nginx介绍
- 搬家至CSDN
- javaweb第五记<监听器,本地化国际化>