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. docker - 各位電腦上有多少個(gè)容器啊?容器一多,自己都搞混了,咋辦呢?2. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””3. mac里的docker如何命令行開啟呢?4. 關(guān)于docker下的nginx壓力測(cè)試5. Docker for Mac 創(chuàng)建的dnsmasq容器連不上/不工作的問(wèn)題6. nignx - docker內(nèi)nginx 80端口被占用7. docker容器呢SSH為什么連不通呢?8. 如何解決Centos下Docker服務(wù)啟動(dòng)無(wú)響應(yīng),且輸入docker命令無(wú)響應(yīng)?9. docker start -a dockername 老是卡住,什么情況?10. dockerfile - 我用docker build的時(shí)候出現(xiàn)下邊問(wèn)題 麻煩幫我看一下

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