Você só pode acessar os elementos por sua chave primária em uma tabela de hash. Isso é mais rápido do que com um algoritmo de árvore (
O(1)
em vez de log(n)
), mas você não pode selecionar intervalos (tudo entre x
e y
Os algoritmos .Tree suportam isso em Log(n)
enquanto os índices de hash podem resultar em uma varredura completa da tabela O(n)
.Além disso, a sobrecarga constante dos índices de hash é geralmente maior (o que não é um fator na notação teta, mas ainda existe ).Também os algoritmos de árvore são geralmente mais fáceis de manter, crescer com dados, escalar, etc. Índices de hash funcionam com tamanhos de hash predefinidos, então você acaba com alguns "buckets" onde os objetos são armazenados. Esses objetos são repetidos novamente para realmente encontrar o correto dentro dessa partição.
Portanto, se você tiver tamanhos pequenos, terá muita sobrecarga para elementos pequenos, tamanhos grandes resultarão em varreduras adicionais.
Os algoritmos de tabelas de hash atuais geralmente são dimensionados, mas o dimensionamento pode ser ineficiente.
No entanto, pode haver um ponto em que seu índice excede um tamanho tolerável em comparação com seus tamanhos de hash e todo o seu índice precisa ser reconstruído. Normalmente, isso não é um problema, mas para bancos de dados enormes, enormes, isso pode levar dias.
A compensação por algoritmos de árvore é pequena e eles são adequados para quase todos os casos de uso e, portanto, são padrão.
No entanto, se você tiver um caso de uso muito preciso e souber exatamente o que e apenas o que será necessário, poderá aproveitar os índices de hash.