摘要:辅助先将赋值给如果为空或长度为先用为其分配空间为的长度先给赋值没有哈希值冲突如果出现了哈希值数组下标重复则用于记录新的数据应该在的位置如果关键字和桶中的数据重复如果桶后所连为红黑树如果桶后所接为普通链表无限循环直到插在链表的最后如果链表
public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node[] tab; Node p; //辅助 int n, i; if ((tab = table) == null || (n = tab.length) == 0) n = (tab = resize()).length; /*先将table赋值给tab,如果table为空或长度为0,先用resize()为其分配空间,n为table的长度*/ if ((p = tab[i = (n - 1) & hash]) == null) //先给p赋值 tab[i] = newNode(hash, key, value, null);//没有哈希值冲突 else { //如果出现了哈希值(table数组下标)重复则.. Node e; //用于记录新的数据应该在的位置 K k; if(p.hash==hash&&((k=p.key)==key||(key!=null&& key.equals(k)))) //如果关键字和桶中的数据重复 e = p; else if (p instanceof TreeNode)//如果桶后所连为红黑树 e = ((TreeNode )p).putTreeVal(this, tab, hash, key, value); else {//如果桶后所接为普通链表 for (int binCount = 0; ; ++binCount) {//无限循环直到break if ((e = p.next) == null) { p.next=newNode(hash, key, value, null);//插在链表的最后 if (binCount >= TREEIFY_THRESHOLD - 1) //如果链表长度不小于8 ,利用下面的函数将其转换为红黑树 treeifyBin(tab, hash); break; }//链表遍历完发现没有重复的关键字 if (e.hash == hash &&((k = e.key) == key || (key != null&& key.equals(k)))) break; //链表中有重复关键字 p = e; //让p等于p的next,实现遍历 } } if (e != null) { //有重复的关键字 V oldValue = e.value; if (!onlyIfAbsent || oldValue == null) e.value = value;//新值替代旧值 afterNodeAccess(e); return oldValue;//返回旧值(被替代的值) } } //如果没有重复的关键字(将要插入一条新的数据) ++modCount; if (++size > threshold) resize(); afterNodeInsertion(evict); return null;}
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/69983.html
摘要:如果键不存在,则执行压栈操作之前创建的空列表。声明当前类注教程的中文网官网附基础知识整理之操作一基础知识整理之操作二 Java操作Redis之操作数据 1.操作 String 1.1 源码 public void stringOperator(){ //添加数据 jedis.set(name, Wayfreem);// 添加一个 key 为 n...
摘要:小结实现了字典和哈希表感觉没有想象中那么困难,当然这还是开始。 本系列所有文章:第一篇文章:学习数据结构与算法之栈与队列第二篇文章:学习数据结构与算法之链表第三篇文章:学习数据结构与算法之集合第四篇文章:学习数据结构与算法之字典和散列表第五篇文章:学习数据结构与算法之二叉搜索树 字典 不是新华字典哦,这里的字典也称作_映射_,是一种数据结构,跟set集合很相似的一种数据结构,都可以用来...
摘要:不过其中的流程算是一个简易的实现,可以对加深一些理解。实现二因此如何来实现一个完整的缓存呢,这次不考虑过期时间的问题。缓存数量超过阈值时移除链表尾部数据。 showImg(https://segmentfault.com/img/remote/1460000014229173?w=1408&h=872); 前言 LRU 是 Least Recently Used 的简写,字面意思则是最...
阅读 1789·2021-10-20 13:49
阅读 1339·2019-08-30 15:52
阅读 2828·2019-08-29 16:37
阅读 1011·2019-08-29 10:55
阅读 3045·2019-08-26 12:14
阅读 1603·2019-08-23 17:06
阅读 3222·2019-08-23 16:59
阅读 2526·2019-08-23 15:42