HashTable源码分析
来源:互联网 发布:mac怎么卸载java 编辑:程序博客网 时间:2024/06/05 03:59
HashTable源码--put方法和get方法:// 将key-value对添加到HashTable中,如果已存在,则新值替旧值,并返回旧值public synchronized V put(K key, V value) { // Hashtable中不能插入value为null的元素!if (value == null) { throw new NullPointerException(); } // 若该key对应的键值对已经存在,则用新的value取代旧的value;返回了旧的value后,退出! Entry tab[] = table; int hash = key.hashCode(); int index = (hash & 0x7FFFFFFF) % tab.length; for (Entry<K,V> e = tab[index] ; e != null ; e = e.next) { if ((e.hash == hash) && e.key.equals(key)) { V old = e.value; e.value = value; return old; } }// 若该key对应的键值对不存在,则将key-value对添加到table中 modCount++; // 若Hashtable实际容量count大于或等于阀值时,扩容if (count >= threshold) { rehash(); tab = table; index = (hash & 0x7FFFFFFF) % tab.length; } // 将key-value对添加到table中 Entry<K,V> e = tab[index]; tab[index] = new Entry<K,V>(hash, key, value, e); count++; return null; } -------------------- // 返回key对应的value,没有的话返回null public synchronized V get(Object key) { Entry tab[] = table; int hash = key.hashCode(); // 计算bucket的位置(即table的下标) int index = (hash & 0x7FFFFFFF) % tab.length; // 找到“key对应的Entry(链表)”,然后在链表中找出“哈希值”和“键值”与key都相等的元素 for (Entry<K,V> e = tab[index] ; e != null ; e = e.next) { if ((e.hash == hash) && e.key.equals(key)) { return e.value; } } return null; }
另请参照文章: 【 HashMap源码分析】
0 0
- HashTable & HashSet 源码分析
- Hashtable 源码分析
- HashTable源码分析
- Hashtable源码分析
- Hashtable源码分析
- STL hashtable 源码分析
- HashTable源码分析
- hashtable源码分析
- HashTable源码分析
- Java-HashTable源码分析
- Hashtable的源码分析
- 《Java源码分析》:Hashtable
- HashTable源码分析
- HashTable源码分析
- HashTable源码分析
- HashTable源码分析
- HashTable源码分析
- HashTable源码分析
- R中的含有千分位分隔符数值无法转换
- Pro Vim学习笔记
- Game - HDU 3389 阶梯博弈
- 数据科学家要拥有哪些核心素质?
- python 类属性和实例属性
- HashTable源码分析
- 第一次作业:源代码计算器之目标一
- Linux socket文件传输
- 诸葛:没有用户画像,何谈精准营销
- 使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务
- 向产品宣战——开发者眼中的Android UI Design
- 【机器学习】knn(k-近邻算法)&numpy安装
- Unity3D之Editor扩展学习——四大名捕闹京东
- Java设计模式六大原则