metodos example collection colecciones java constructor initialization hashset zero

example - metodos de hashmap java



¿Por qué inicializar HashSet<>(0) a cero? (5)

El factor de carga inicial de HashMap es 16. Cuando HashMap contiene datos de 12 registros, que es el 75% de su tamaño inicial. entonces HashMap aumenta su tamaño.

Así que aquí solo establecemos la capacidad inicial en 0 pasándola en Constructor.

Me encanta un HashSet <> () y lo uso con entusiasmo al inicializarlo con el constructor predeterminado:

Set<Users> users = new HashSet<>();

Ahora, mi creador de bean automático (herramientas JBoss) inicializa esto como:

Set<Users> users = new HashSet<>(0);

¿Por qué el cero ? La API me dice que esta es la capacidad inicial , pero ¿cuál es la ventaja de poner esto a cero? ¿Se recomienda esto?


Esto lo pondrá al mínimo.

Lo más probable es que esto se use para desactivar los analizadores de código que pueden quejarse si no ha establecido una capacidad inicial para las colecciones. Al establecerlo en 0, simplemente lo establece en el mínimo.

No es una gran optimización, ya que tan pronto como agregas una entrada, el factor de carga de 0.7 hará que la capacidad 2, recrea el Map.Entry[] en el proceso.


HashSet utiliza los datos de la tienda HashMap:

public HashSet(int initialCapacity) { map = new HashMap<E,Object>(initialCapacity); }

mientras que la capacidad inicial = 0,

public HashMap(int initialCapacity, float loadFactor) { .... // Find a power of 2 >= initialCapacity int capacity = 1; while (capacity < initialCapacity) capacity <<= 1; }

la capacidad de HashMap es 1 .

pero si usa el constructor por defecto:

public HashMap() { this.loadFactor = DEFAULT_LOAD_FACTOR; threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR); table = new Entry[DEFAULT_INITIAL_CAPACITY]; init(); }

La capacidad de HashMap es de 16*0.75 .

Entonces, el new HashSet<>(0) guarda algo de memoria cuando se inicia.


La capacidad inicial predeterminada es 16 , por lo que al pasar 0 puede guardar algunos bytes de memoria si no coloca nada en el conjunto.

Aparte de eso no hay una ventaja real; cuando pasa 0, el conjunto se crea con una capacidad de 1 y, tan pronto como agregue algo, tendrá que cambiar su tamaño.


Si ves docs

Hay alguna pista.

La repetición de este conjunto requiere un tiempo proporcional a la suma del tamaño de la instancia de HashSet (el número de elementos) más la "capacidad" de la instancia de respaldo de HashMap (el número de cubos). Por lo tanto, es muy importante no establecer la capacidad inicial demasiado alta (o el factor de carga demasiado bajo) si el rendimiento de la iteración es importante.