Antony Vimal Raj:
Eu tenho ido através da implementação de Java 8 HashMap e chegou com abaixo dúvidas. Por favor me ajude a esclarecer-lhes:
- Eu li em um artigo que diz que, nós com o mesmo código hash será adicionado no mesmo balde como uma lista ligada. Ele diz que o novo nó a esta lista ligada será adicionado na cabeça insteadof cauda para evitar a passagem de cauda. Mas quando eu ver o código fonte, novo nó está sendo adicionado na cauda. Isso está correto?
- Eu não entendia completamente este MIN_TREEIFY_CAPACITY variável. É como depois de tanto contagem, mapa inteiro será convertido em árvore (de matriz para árvore)?
Peter Lawrey:
Mas quando eu ver o código fonte, novo nó está sendo adicionado na cauda. Isso está correto?
Ele é adicionado à cabeça, em versões mais antigas. No entanto, muitas mudanças foram feitas em Java 8 que faz.
class A {
static class SameHash {
final int n;
SameHash(int n) {
this.n = n;
}
@Override
public int hashCode() {
return 1;
}
@Override
public String toString() {
return "SameHash{" +
"n=" + n +
'}';
}
}
public static void main(String[] args) {
HashSet<SameHash> set = new HashSet<>();
for (int i = 1; i <= 4; i++)
set.add(new SameHash(i));
System.out.println(set);
}
}
impressões
[SameHash{n=1}, SameHash{n=2}, SameHash{n=3}, SameHash{n=4}]
NOTA: As chaves podem ter diferentes hashcodes mas pode acabar no mesmo balde.
Eu não entendia completamente este MIN_TREEIFY_CAPACITY variável. É como depois de tanto contagem, mapa inteiro será convertido em árvore (de matriz para árvore)?
Após essa contagem, o balde é convertido em uma árvore desde que a chave é Comparable