Série de código-fonte Java: Explicação detalhada do princípio de armazenamento subjacente do HashMap - 7. Demonstração 1.7 Verificação do princípio de implementação subjacente - como usar o armazenamento de lista encadeada

Índice

prefácio

Armazenamento Chen Er

Loja Zhang San (ocorre um conflito)

Loja Li Si e Wang Wu

Macaco da loja (conflito ocorre)

resumo


prefácio

No artigo anterior, falamos sobre como usar algoritmo de hash, armazenamento de array, etc.

Neste artigo, apresentaremos como Chen Er e outros valores são armazenados, como o hashmap usa listas encadeadas, etc.

Armazenamento Chen Er

OK, então salvamos Liu Yi e depois salvaremos Chen Er. Ele é armazenado no local 5,

Podemos conhecer a estrutura dos dados, a posição do array subscrito 5, não há valor nele, está vazio. OK, então vamos armazenar Chen Er nisso.

Loja Zhang San (ocorre um conflito)

Então vamos salvar Zhang San novamente, vamos dar uma olhada em qual é o local de armazenamento de Zhang San? Seu local de armazenamento é 4 e seu valor de hash é 774889

OK, vamos vir aqui para ver agora, e o nó Zhang San? Desenhe, mas quando formos salvar Zhang San.

Verifica-se que seu subscrito é igual a 4, o que podemos encontrar neste momento, alunos? Então, neste momento, algo está acontecendo conosco?

Temos o problema do conflito, temos duas chaves diferentes, mas o valor que extraímos é todo subscrito igual a 4, então o que devemos fazer neste momento?

Então há um conflito de hash neste momento, como resolver o conflito de hash? Caso seja resolvido com uma lista encadeada, OK, use uma lista encadeada.

Então, alunos, acabamos de salvar dois valores aqui, um é hash (valor de hash) e um é próximo. Este próximo é na verdade uma referência à lista encadeada (c e c++ são chamados de ponteiros), então como salvá-lo ?

Em outras palavras, e quanto ao nosso Zhang San, ele deixará Liu Yi desistir de sua posição. Então o que fazer? Então, nós Zhang San, é o nó principal .

OK, então deixe nosso próximo Zhang San se referir ao nosso Liu Yi, todos devem ser capazes de entender e entender.

Então, nosso próximo Zhang San, na verdade armazena o endereço de Liu Yi , é assim que resolvemos o problema do conflito, ou seja, usamos esse recurso da nossa lista encadeada,

Então, neste momento, neste local, não é mais uma matriz e esses dois nós já são nossa lista encadeada.

OK, a lista encadeada está marcada em amarelo aqui. Acabamos de demonstrar como resolver conflitos, e então continuaremos a economizar um valor.

Loja Li Si e Wang Wu

Qual é a posição de Li Si? A posição de Li Si é 6, descobrimos que está vazia no momento, armazenamos diretamente esse valor de Li Si em nosso 6,

Então vamos salvar Wang Wu, qual é a posição de Wang Wu? A posição de Wang Wu é 0, OK, se for 0, descobrimos que também está vazio no momento,

Portanto, também pode atribuir diretamente a posição onde o subscrito é igual a 0.

Macaco da loja (conflito ocorre)

Então vamos salvar nosso macaco de novo, vamos olhar o macaco, vamos calcular o valor, digamos que seja 4, se for 4,

Colegas, estamos um pouco envergonhados agora, por que estamos um pouco envergonhados? Agora estou atribuindo um valor aqui, o que aconteceu com o nosso valor?

Nosso subscrito igual a 4 já tem um valor, ou seja, nosso macaco está com conflito novamente, nessa hora alunos, o que devemos fazer?

Seu valor de hash é um número negativo. É conveniente para mim demonstrar aqui. Vou pegar 8749 e pegar os últimos quatro dígitos de 8749.

Como encontramos Liu Yi quando salvamos Zhang San agora, deixamos o valor de Zhang San ser inserido diretamente neste cabeçalho ,

Portanto, quando houver um conflito no valor de nosso macaco, nosso macaco atual também permitirá que nosso Zhang San desista dessa posição.

Então, este Zhang San também desistirá desta posição e, em seguida, deixará nosso macaco ocupar esta posição, então deixe nosso macaco apontar para nosso Zhang San,

Então nosso Zhang Zhangsan aponta para nosso Liu Yi, é assim que se armazena a estrutura.

resumo

Então, onde estamos agora? Esses 6 elementos passam pelo nosso método put, pela implementação do algoritmo hash,

Então podemos armazená-lo em nosso array e esta lista encadeada agora, este lugar é muito importante,

Bem, estamos aqui agora, estamos realmente falando sobre 1.7.

Mais tarde, falarei sobre a camada inferior do 1.8, como implementá-la e a análise do código-fonte, etc.

Como resolver o problema de que nossa CPU está 100% incluindo o método de inserção da cabeça e o método de inserção da cauda?

OK, ok, então eu estava aqui agora para fazer um desenho para todos, para resolver passo a passo, e terminei de explicar o processo!

Acho que você gosta

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