Uma característica específica de um HashMap é que, diferentemente das árvores balanceadas, seu comportamento é probabilístico. Nesses casos, geralmente é mais útil falar sobre complexidade em termos da probabilidade de ocorrência de um evento de pior caso. Para um mapa de hash, é claro que esse é o caso de uma colisão com relação ao quão cheio o mapa está. É fácil estimar uma colisão.
p colisão = n / capacidade
Portanto, é provável que um mapa de hash com até um número modesto de elementos sofra pelo menos uma colisão. A notação Big O nos permite fazer algo mais atraente. Observe que para qualquer constante fixa e arbitrária k.
O (n) = O (k * n)
Podemos usar esse recurso para melhorar o desempenho do mapa de hash. Em vez disso, poderíamos pensar na probabilidade de no máximo 2 colisões.
p colisão x 2 = (n / capacidade) 2
Isso é muito menor. Como o custo de lidar com uma colisão extra é irrelevante para o desempenho do Big O, encontramos uma maneira de melhorar o desempenho sem realmente alterar o algoritmo! Podemos generalizar isso para
p colisão xk = (n / capacidade) k
E agora podemos desconsiderar um número arbitrário de colisões e acabar com uma probabilidade muito pequena de mais colisões do que estamos contabilizando. Você pode obter a probabilidade para um nível arbitrariamente pequeno escolhendo o k correto, tudo sem alterar a implementação real do algoritmo.
Falamos sobre isso dizendo que o mapa de hash tem acesso O (1) com alta probabilidade