English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Detailed Explanation and Example Code of java HashMap Expansion

Agrandissement de HashMap

Préambule :

Lorsque HashMap.size est supérieure ou égale à(Capacité*Facteur de charge) déclenche l'opération d'agrandissement, ce qui est une opération coûteuse.

Pourquoi agrandir ??La capacité par défaut de HashMap est16,Plus les éléments sont ajoutés au HashMap, plus le taux de conflit de hash est élevé, et plus les listes correspondantes des buckets seront longues,

Cela affectera les performances de la recherche, car il faut parcourir la liste chaque fois, comparer les objets pour trouver l'élément.

Pour améliorer les performances de la recherche, il ne peut qu'agrandir, réduire les conflits de hash, et distribuer les éléments de clé le plus uniformément possible.

Points d'agrandissement

La valeur par défaut du facteur de charge est 0.75

static final float DEFAULT_LOAD_FACTOR = 0.75f;

La valeur par défaut de la capacité est16

 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // =16

HashMap fournit un paramètre de construction, qui peut spécifier la capacité et le facteur de charge lors de la création.

 public HashMap(int initialCapacity, float loadFactor)

Par défaut, lorsque la taille de HashMap est supérieure ou égale à16*0.75=12de

Et lorsque chaque Entry (ou bac) contient au moins un élément, l'agrandissement est effectué.

 if ((size >= threshold) && (null != table[bucketIndex])) {
      resize(2 * table.length);
      hash = (null != key) ? hash(key) : 0;
      bucketIndex = indexFor(hash, table.length);
}

Lors de l'agrandissement, la capacité du conteneur est doublée

 resize(2 * table.length);

Lors de l'agrandissement, il faut recalculer l'indice des éléments du tableau

1、Allouer un nouveau tableau Entry
2、Recalculer l'indice de l'élément original dans le nouveau tableau(Consomme beaucoup de ressources)

Merci de lire, j'espère que cela peut aider tout le monde, merci pour le soutien à ce site !