Serie de código fuente de Java: explicación detallada del principio de almacenamiento subyacente de HashMap - 7. Demostración 1.7 Verificación del principio de implementación subyacente: cómo usar el almacenamiento de lista enlazada

Tabla de contenido

prefacio

Almacenamiento Chen Er

Tienda Zhang San (se produce un conflicto)

Tienda Li Si y Wang Wu

Almacenar mono (se produce un conflicto)

resumen


prefacio

En el artículo anterior, hablamos sobre cómo usar el algoritmo hash, el almacenamiento en matriz, etc.

En este artículo, presentaremos cómo se almacenan Chen Er y otros valores, cómo hashmap usa listas vinculadas, etc.

Almacenamiento Chen Er

Bien, entonces hemos salvado a Liu Yi, y luego salvaremos a Chen Er. Se almacena en la ubicación 5,

Podemos conocer la estructura de datos, la posición del subíndice 5 de la matriz, no tiene ningún valor, está vacío. Bien, entonces almacenaremos a Chen Er en esto.

Tienda Zhang San (se produce un conflicto)

Entonces, salvemos a Zhang San nuevamente, echemos un vistazo a cuál es la ubicación de almacenamiento de Zhang San. Su ubicación de almacenamiento es 4 y su valor hash es 774889

OK, vengamos aquí para ver ahora, ¿qué pasa con el nodo Zhang San? Dibújalo, pero cuando vayamos a salvar a Zhang San.

Se encuentra que su subíndice es igual a 4, ¿qué podemos encontrar en este momento, estudiantes? Entonces, en este momento, ¿nos está pasando algo?

Tenemos el problema del conflicto, tenemos dos claves diferentes, pero el valor que extraemos es todo subíndice igual a 4, entonces, ¿qué debemos hacer en este momento?

Entonces hay un conflicto hash en este momento, ¿cómo resolver el conflicto hash? Si se resuelve con una lista enlazada, OK, use una lista enlazada.

Entonces, estudiantes, ¿acabamos de guardar dos valores aquí, uno es hash (valor hash) y el otro es el siguiente? El siguiente es en realidad una referencia a la lista vinculada (c y c ++ se llaman punteros), así que cómo guardarlo ?

Es decir, ¿qué pasa con nuestro Zhang San? Dejará que Liu Yi renuncie a su puesto. ¿Entonces que hacer? Entonces, Zhang San, es el nodo principal .

Bien, entonces deje que nuestro Zhang San se refiera a nuestro Liu Yi, todos deberían poder entender y comprender.

Entonces, el siguiente de nuestro Zhang San, en realidad almacena la dirección de Liu Yi , así es como resolvemos el problema del conflicto, es decir, usamos esta función de nuestra lista vinculada,

Entonces, en este momento en este lugar, ya no es una matriz, y estos dos nodos, ya son nuestra lista enlazada.

Bien, la lista enlazada está marcada en amarillo aquí. Acabamos de demostrar cómo resolver conflictos, y luego continuaremos guardando un valor.

Tienda Li Si y Wang Wu

¿Cuál es la posición de Li Si? La posición de Li Si es 6, encontramos que actualmente está vacío, almacenamos directamente este valor de Li Si debajo de nuestro 6,

Luego vamos a salvar a Wang Wu, ¿cuál es la posición de Wang Wu? La posición de Wang Wu es 0, OK, si es 0, encontramos que actualmente también está vacío,

Por lo tanto, también puede asignar directamente la posición donde el subíndice es igual a 0.

Almacenar mono (se produce un conflicto)

Entonces vamos a salvar de nuevo a nuestro mono, miremos al mono, calculemos el valor, digamos que es 4, si es 4,

Compañeros de clase, estamos un poco avergonzados ahora, ¿por qué estamos un poco avergonzados? Ahora estoy asignando un valor aquí, ¿qué pasó con nuestro valor?

Nuestro subíndice igual a 4 ya tiene valor, es decir, nuestro mono vuelve a tener un conflicto, en este momento alumnos, ¿qué debemos hacer?

Su valor hash es un número negativo. Me conviene demostrarlo aquí. Tomaré 8749 y tomaré los últimos cuatro dígitos de 8749.

Como encontramos a Liu Yi cuando guardamos a Zhang San hace un momento, dejamos que el valor de Zhang San se inserte directamente en este encabezado ,

Entonces, cuando hay un conflicto en el valor de nuestro mono, nuestro mono actual también permitirá que nuestro Zhang San renuncie a esta posición.

Luego, este Zhang San también renunciará a esta posición, y luego dejará que nuestro mono ocupe esta posición, así que permita que nuestro mono señale a nuestro Zhang San,

Luego, nuestro Zhang Zhangsan señala a nuestro Liu Yi, así es como se almacena la estructura.

resumen

Entonces, ¿dónde estamos ahora? Estos 6 elementos pasan por nuestro método put, mediante la implementación del algoritmo hash,

Entonces podemos almacenarlo en nuestra matriz y esta lista enlazada ahora, este lugar es muy, muy importante,

Bueno, estamos aquí ahora, de hecho estamos hablando de 1.7.

Más adelante, les hablaré sobre la capa inferior de 1.8, cómo implementarla y el análisis del código fuente, etc.

¿Cómo resolver el problema de que nuestra CPU es 100% incluyendo el método de inserción de la cabeza y el método de inserción de la cola?

Bien, bien, entonces estuve aquí hace un momento para hacer un dibujo para todos, para resolverlo paso a paso, ¡y he terminado de explicar el proceso!

Supongo que te gusta

Origin blog.csdn.net/YuDBL/article/details/126460458
Recomendado
Clasificación