Lecture du code source Jdk - "Interprétation du code source de la classe LinkedHashMap

I. Aperçu

LinkedHashMap est dû au fait que je l'ai vu dans la classe LruCache du code source du cache mybatis. J'étais perplexe, alors je l'ai suivi et j'ai jeté un coup d'œil. Par conséquent, le contenu de cet article est uniquement pour résoudre

LruCache 中removeEldestEntry方法 最老的元素 是如何来的来展开说。

Parceque je veux savoir. Dans ce LinkedHashMap. D'où proviennent les données les moins visitées? J'ai commencé à regarder le code et à déboguer les données.

Ce sont mes données de test

package com.llr.reflect.test;

import java.util.LinkedHashMap;

public class LinkedHashMapTest {
    public static void main(String[] args) {
        LinkedHashMap<Object,String> linkedHashMap= new LinkedHashMap<Object, String>(100, .75F, true) {
        };
        linkedHashMap.put("1","2");
        linkedHashMap.put("2","3");
        linkedHashMap.put("3","3");
        linkedHashMap.put("4","3");
        System.out.println(linkedHashMap.get("2"));
        System.out.println(linkedHashMap.get("1"));
        System.out.println(linkedHashMap.get("1"));
    }
}

C'est un appel à mettre. Il appelle d'abord la méthode put de hashMap, et enfin appelle la méthode afterNodeInsertion de la sous-classe

Lorsque les 4 éléments sont placés, la carte ressemble à ceci

Utilisez maintenant System.out.println (linkedHashMap.get ("2")); afterNodeAccess pour réinitialiser et trier la chaîne

Utilisez maintenant System.out.println (linkedHashMap.get ("1")); afterNodeAccess pour réinitialiser et trier la chaîne

 

Deux: il peut être vu à partir des résultats des tests ci-dessus. L'afterNodeAccess dans la classe LinkedHashMap peut réorganiser les chaînes et trouver les moins utilisées et les placer dans le premier attribut head.

De cela, nous savons que la tête contient la clé la moins consultée, donc à l'étape suivante, regardez la relation entre cette tête et la méthode removeEldestEntry de LinkedHashMap  .

Voyant cela, la tête est assignée en premier. Et appelez la méthode removeEldestEntry, à partir de là, nous savons.

removeEldestEntry方法的入参。就是最少被使用的键值对象。至于removeEldestEntry 方法在源码中返回的是false,那么我们可以重新这个方法,当满足我们什么条件的时候,我们就返回true。

Je ne sais pas si vous pouvez comprendre mon expression. Mais je suis vraiment aqueux. Je l'ai compris par moi-même. Je crois que vous comprenez également. Hehe ~

Trois: Résumé

Quand il y a un problème, vous devez réfléchir davantage. n'abandonne pas. n'abandonne pas!

 

 

Je suppose que tu aimes

Origine blog.csdn.net/lileronglilerong/article/details/113871176
conseillé
Classement