Lectura de código fuente Jdk- "Interpretación del código fuente de la clase LinkedHashMap

I. Panorama general

LinkedHashMap se debe a que lo vi en la clase LruCache del código fuente de la caché mybatis. Estaba desconcertado, así que lo seguí y eché un vistazo. Por lo tanto, el contenido de este artículo es solo para resolver

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

Porque quiero saber. En este LinkedHashMap. ¿De dónde provienen los datos menos visitados? Comencé a mirar el código y a depurar los datos.

Estos son mis datos de prueba

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"));
    }
}

Esta es una llamada a poner. Primero llama al método put de hashMap y finalmente llama al método afterNodeInsertion de la subclase

Cuando se colocan los 4 elementos, el mapa se ve así

Ahora use System.out.println (linkedHashMap.get ("2")); afterNodeAccess para restablecer y ordenar la cadena

Ahora use System.out.println (linkedHashMap.get ("1")); afterNodeAccess para restablecer y ordenar la cadena

 

Dos: se puede ver en los resultados de las pruebas anteriores. El afterNodeAccess en la clase LinkedHashMap puede reordenar las cadenas y encontrar las menos utilizadas y colocarlas en el primer atributo de cabecera.

A partir de esto, sabemos que el encabezado contiene la clave menos accedida, por lo que en el siguiente paso, observe la relación entre este encabezado y el método removeEldestEntry del LinkedHashMap  .

Al ver eso, la cabeza se asigna primero. Y llame al método removeEldestEntry, de esto, lo sabemos.

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

No sé si puedes entender mi expresión. Pero estoy muy aguada. Lo descubrí yo mismo. Creo que tú también lo entiendes. Jeje ~

Tres: Resumen

Cuando hay un problema, necesita pensar más. no te rindas. ¡no te rindas!

 

 

Supongo que te gusta

Origin blog.csdn.net/lileronglilerong/article/details/113871176
Recomendado
Clasificación