摘要:輔助先將賦值給如果為空或長度為先用為其分配空間為的長度先給賦值沒有哈希值沖突如果出現了哈希值數組下標重復則用于記錄新的數據應該在的位置如果關鍵字和桶中的數據重復如果桶后所連為紅黑樹如果桶后所接為普通鏈表無限循環直到插在鏈表的最后如果鏈表
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;}
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/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 的簡寫,字面意思則是最...
閱讀 1830·2021-10-20 13:49
閱讀 1371·2019-08-30 15:52
閱讀 2876·2019-08-29 16:37
閱讀 1046·2019-08-29 10:55
閱讀 3079·2019-08-26 12:14
閱讀 1659·2019-08-23 17:06
閱讀 3243·2019-08-23 16:59
閱讀 2553·2019-08-23 15:42