La taille par défaut de la capacité de collecte

Par défaut capacité initiale ArrayList, vecteur, HashMap, HashTable, HashSet, le facteur de charge, l'extension incrémentale

Ici, pour discuter de ces raisons communes pour une capacité initiale par défaut et l'expansion est la suivante:

Lorsque la mise en œuvre sous-jacente implique le conteneur d'extension ou réattribuer une section contiguë de mémoire plus importante (allocation dynamique de mémoire n'est pas nécessaire si la distribution est réallocation discrète, l'insertion d'un nouvel élément est affecté un temps discret), toutes les données d'origine de réplication votre conteneur à la nouvelle mémoire, ce qui réduit considérablement l'efficacité sans aucun doute.

le facteur de charge du facteur est inférieur ou égal à 1, à savoir, lorsque la longueur moyenne de * le nombre d'éléments est supérieur au facteur de capacité lorsque le coefficient de chargement, pour l'expansion.

De plus, il y a l'extension de la valeur par défaut multiples, différentes situations d'expansion des conteneurs.

éléments de liste sont, répétables

ArrayList, par défaut vecteur capacité initiale de 10

** Vecteur: thread-safe **, mais plus lent

Sous-jacent structure de données est un tableau de la structure

Le facteur de charge est de 1: Autrement dit, lorsque le nombre d'éléments est supérieur à la capacité d'une longueur, d'expansion

extension incrémentale: 1 fois le volume d'origine

La capacité vectorielle de 10, après une expansion d'une capacité de 20

** ArrayList: ** thread-safe, vitesse de recherche rapide

Sous-jacent structure de données est un tableau de la structure

l'expansion progressive: 1,5 fois le volume initial

Comme la capacité de ArrayList 10, après une expansion d'une capacité de 15

SET élément (set) en désordre irremplaçable.

** HashSet: thread-safe **, la vitesse d'accès rapide

Le HashMap est une implémentation sous-jacente (données de conservation), met en œuvre l'ensemble d'interface

La capacité initiale par défaut de 16 (16 est la raison pour laquelle, comme décrit dans le fond de la HashMap)

Le facteur de charge est de 0,75: à savoir, lorsque le nombre d'éléments est supérieur à 0,75 fois la longueur de la capacité, pour l'expansion

extension incrémentale: 1 fois le volume d'origine

La capacité de HashSet de 16 ans, après une expansion d'une capacité de 32

La carte est un ensemble de deux colonnes

** HashMap: défaut ** capacité initiale de 16, une longueur de 2 ^ n restent

(Pourquoi est 2 ^ 4 est 16h16, l'efficacité requête peut être améliorée, plus, << 1 32 = 16 -> Pour une analyse détaillée de la raison peut être séparée, ou l'analyse de code source)

Le facteur de charge est de 0,75: à savoir, lorsque le nombre d'éléments est supérieur à 0,75 fois la longueur de la capacité, pour l'expansion

extension incrémentale: 1 fois le volume d'origine

La capacité de HashMap de 16 ans, après une expansion d'une capacité de 32

** Hashtable: capacité initiale par défaut ** de 11

Thread-safe, mais lent et ne permet pas de clé / valeur est nulle

Le facteur de charge est de 0,75: à savoir, lorsque le nombre d'éléments est supérieur à 0,75 fois la longueur de la capacité, pour l'expansion

extension incrémentale: la longueur du tableau d'origine + 2 *

Comme la capacité de table de hachage 11, après une expansion d'une capacité de 23

Publié sept articles originaux · a gagné les éloges 2 · Vues 1184

Je suppose que tu aimes

Origine blog.csdn.net/weixin_41040866/article/details/102962857
conseillé
Classement