Java HashMap的数据结构以及put和get方法
来源:互联网 发布:win7怎么装sqlserver 编辑:程序博客网 时间:2024/06/10 04:34
1 HashMap的数据结构
HashMap实际上是一个链表数组,也就是最外层是数组,数组的元素是链表。
2 HashMap的put方法:
源代码如下:
<span style="font-size:10px;"> public V put(K key, V value) { //1 如果Key为Null 则put到Key为null的位置 if (key == null) return putForNullKey(value); //2 计算Key的hash值 int hash = hash(key.hashCode()); //3 获取index位置 int i = indexFor(hash, table.length); //4 遍历index位置的链表,如果存在则覆盖并返回旧值,如果不存在就创建一个新位置插入 for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; //4.1 Key的位置已经有旧的值了 则把新值给旧值 并返回旧值 if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } //4.2 如果Key是新的则调用addEntry插入新的Key和value modCount++; addEntry(hash, key, value, i); return null; }</span>
3 源代码如下HashMap的get方法:
源代码如下:
<span style="font-size:10px;"> public V get(Object key) { //1 如果Key是null 直接返回key为null位置的值 if (key == null) return getForNullKey(); //2 计算Key对象的hash值 int hash = hash(key.hashCode()); for (Entry<K,V> e = table[indexFor(hash, table.length)]; //通过计算Key的hash找到index e != null; e = e.next) {//在index中找遍历链表 Object k; //通过equals比较找到Key位置 如果找到Key 并返回value if (e.hash == hash && ((k = e.key) == key || key.equals(k))) return e.value; } return null; }</span>
4 concurrentHashMap的分析:
主要是划分segment
参考资料:
java提高篇(二三)-----HashMap
源码分析之ConcurrentHashMap
0 0
- Java HashMap的数据结构以及put和get方法
- hashmap的数据结构以及put和get
- HashMap的put和get方法原理
- HashMap.put/get方法
- hashMap底层put和get方法逻辑
- HashMap的put,get方法实现!
- Java HashMap的put()方法、size()方法
- JDK源码之解读hashMap 的put和get方法的实现原理
- HashMap底层详解-001-数据结构、put、get
- HashMap的put()方法
- 手写HashMap,实现put,get以及扩容
- Java HashMap中put与get的工作原理
- java HashMap的put
- 了解HashMap的get和put内部的工作原理,需要理解透Java HashMap的原理
- POST和GET的区别以及PUT和DELETE
- HashMap中put与get的实现
- HashMap中的数据结构与get,put源码解析
- java 8 Hashmap深入解析 —— put get 方法源码
- android---(volley网络通信框架)
- 记录python数据持久存储的一点问题
- LeetCode Contains Duplicate II 数组
- java.util.logging.Logger使用详解
- 【HttpClient4.5中文教程】【第一章 :基础】1.3 HttpClient执行上下文
- Java HashMap的数据结构以及put和get方法
- 计算机系统的硬件结构之存储器
- 【C++】内联函数,inline
- POJ1741(树分治)
- BZOJ 2956 模积和 (分块加速)
- 【HttpClient4.5中文教程】【第一章 :基础】1.4 HTTP协议拦截器
- 开更C博
- 6、Swift元组的使用
- ViewPager实现页卡的最新方法--简洁的TabLayout(谷歌支持包)