摘要:輔助先將賦值給如果為空或長度為先用為其分配空間為的長度先給賦值沒有哈希值沖突如果出現(xiàn)了哈希值數(shù)組下標(biāo)重復(fù)則用于記錄新的數(shù)據(jù)應(yīng)該在的位置如果關(guān)鍵字和桶中的數(shù)據(jù)重復(fù)如果桶后所連為紅黑樹如果桶后所接為普通鏈表無限循環(huán)直到插在鏈表的最后如果鏈表
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 { //如果出現(xiàn)了哈希值(table數(shù)組下標(biāo))重復(fù)則.. Node e; //用于記錄新的數(shù)據(jù)應(yīng)該在的位置 K k; if(p.hash==hash&&((k=p.key)==key||(key!=null&& key.equals(k)))) //如果關(guān)鍵字和桶中的數(shù)據(jù)重復(fù) e = p; else if (p instanceof TreeNode)//如果桶后所連為紅黑樹 e = ((TreeNode )p).putTreeVal(this, tab, hash, key, value); else {//如果桶后所接為普通鏈表 for (int binCount = 0; ; ++binCount) {//無限循環(huán)直到break if ((e = p.next) == null) { p.next=newNode(hash, key, value, null);//插在鏈表的最后 if (binCount >= TREEIFY_THRESHOLD - 1) //如果鏈表長度不小于8 ,利用下面的函數(shù)將其轉(zhuǎn)換為紅黑樹 treeifyBin(tab, hash); break; }//鏈表遍歷完發(fā)現(xiàn)沒有重復(fù)的關(guān)鍵字 if (e.hash == hash &&((k = e.key) == key || (key != null&& key.equals(k)))) break; //鏈表中有重復(fù)關(guān)鍵字 p = e; //讓p等于p的next,實(shí)現(xiàn)遍歷 } } if (e != null) { //有重復(fù)的關(guān)鍵字 V oldValue = e.value; if (!onlyIfAbsent || oldValue == null) e.value = value;//新值替代舊值 afterNodeAccess(e); return oldValue;//返回舊值(被替代的值) } } //如果沒有重復(fù)的關(guān)鍵字(將要插入一條新的數(shù)據(jù)) ++modCount; if (++size > threshold) resize(); afterNodeInsertion(evict); return null;}
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69983.html
摘要:如果鍵不存在,則執(zhí)行壓棧操作之前創(chuàng)建的空列表。聲明當(dāng)前類注教程的中文網(wǎng)官網(wǎng)附基礎(chǔ)知識(shí)整理之操作一基礎(chǔ)知識(shí)整理之操作二 Java操作Redis之操作數(shù)據(jù) 1.操作 String 1.1 源碼 public void stringOperator(){ //添加數(shù)據(jù) jedis.set(name, Wayfreem);// 添加一個(gè) key 為 n...
摘要:小結(jié)實(shí)現(xiàn)了字典和哈希表感覺沒有想象中那么困難,當(dāng)然這還是開始。 本系列所有文章:第一篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之棧與隊(duì)列第二篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之鏈表第三篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之集合第四篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之字典和散列表第五篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之二叉搜索樹 字典 不是新華字典哦,這里的字典也稱作_映射_,是一種數(shù)據(jù)結(jié)構(gòu),跟set集合很相似的一種數(shù)據(jù)結(jié)構(gòu),都可以用來...
摘要:不過其中的流程算是一個(gè)簡易的實(shí)現(xiàn),可以對(duì)加深一些理解。實(shí)現(xiàn)二因此如何來實(shí)現(xiàn)一個(gè)完整的緩存呢,這次不考慮過期時(shí)間的問題。緩存數(shù)量超過閾值時(shí)移除鏈表尾部數(shù)據(jù)。 showImg(https://segmentfault.com/img/remote/1460000014229173?w=1408&h=872); 前言 LRU 是 Least Recently Used 的簡寫,字面意思則是最...
摘要:提供了專門的集合類用來存放這種對(duì)象關(guān)系的對(duì)象,即接口。中的集合,元素是成對(duì)存在的理解為夫妻。中的集合稱為單列集合,中的集合稱為雙列集合。根據(jù)指定的鍵,在集合中獲取對(duì)應(yīng)的值。 day04 【Map】 主要內(nèi)容 Map集合 教學(xué)目標(biāo) [ ] 能夠說出Map集合特點(diǎn) [ ] 使用Map集合添加方法保存數(shù)據(jù) [ ] 使用鍵找值的方式遍歷Map集合 [ ] 使用鍵值對(duì)的方式遍歷Map集合 [ ...
閱讀 1830·2021-10-20 13:49
閱讀 1370·2019-08-30 15:52
閱讀 2875·2019-08-29 16:37
閱讀 1045·2019-08-29 10:55
閱讀 3079·2019-08-26 12:14
閱讀 1658·2019-08-23 17:06
閱讀 3241·2019-08-23 16:59
閱讀 2551·2019-08-23 15:42