java - HashMap中afterNodeInsertion方法有什么作用呢
問(wèn)題描述
環(huán)境:jdk1.8問(wèn)題:學(xué)習(xí)HashMap的時(shí)候發(fā)現(xiàn)在putVal方法的最后調(diào)用了afterNodeInsertion方法
... ++modCount; if (++size > threshold)resize(); afterNodeInsertion(evict); return null;
又去搜索一下afterNodeInsertion方法,發(fā)現(xiàn)不少地方都調(diào)用了它,但是它的實(shí)現(xiàn)卻是
void afterNodeInsertion(boolean evict) { }
一個(gè)空方法??想知道這個(gè)方法到底有什么作用呢?
問(wèn)題解答
回答1:// Callbacks to allow LinkedHashMap post-actionsvoid afterNodeAccess(Node<K,V> p) { }void afterNodeInsertion(boolean evict) { }void afterNodeRemoval(Node<K,V> p) { }
源碼中其實(shí)已經(jīng)說(shuō)了,這個(gè)三個(gè)方法都是為了繼承HashMap的LinkedHashMap類服務(wù)的。
LinkedHashMap 是 HashMap 的一個(gè)子類,它保留插入的順序,如果需要輸出的順序和輸入時(shí)的相同,那么就選用 LinkedHashMap。
LinkedHashMap中被覆蓋的afterNodeInsertion方法,用來(lái)回調(diào)移除最早放入Map的對(duì)象
void afterNodeInsertion(boolean evict) { // possibly remove eldest LinkedHashMap.Entry<K,V> first; if (evict && (first = head) != null && removeEldestEntry(first)) {K key = first.key;removeNode(hash(key), key, null, false, true); }}
相關(guān)文章:
1. javascript - sublime快鍵鍵問(wèn)題2. 實(shí)現(xiàn)bing搜索工具urlAPI提交3. javascript - 移動(dòng)端上不能實(shí)現(xiàn)拖拽布局嗎?4. boot2docker無(wú)法啟動(dòng)5. thinkPHP5中獲取數(shù)據(jù)庫(kù)數(shù)據(jù)后默認(rèn)選中下拉框的值,傳遞到后臺(tái)消失不見(jiàn)。有圖有代碼,希望有人幫忙6. 前端 - 這段代碼一直生效不了,查半天因?yàn)?top: 0px; 分號(hào)后一個(gè)隱藏的東西,也不是占位符...刪了就可以生效,這是什么情況。。7. angular.js - 單頁(yè)應(yīng)用(ng/vue)該如何監(jiān)聽(tīng)用戶離開(kāi)當(dāng)前頁(yè)面(或者路由)?8. nginx bind failed9. javascript - 如何判斷不同兩個(gè)對(duì)象觸發(fā)同一事件?10. javascript - react native在run-android時(shí)出現(xiàn)這個(gè)錯(cuò)誤該怎么解決?大神賜教

網(wǎng)公網(wǎng)安備