De los JavaDocs de HashSet:¿Cuánto cuesta la iteración en un HashSet también depende de la capacidad del mapa de respaldo?
Esta clase ofrece un rendimiento constante de tiempo para las operaciones básicas (añadir, eliminar, contiene y tamaño), asumiendo la función de dispersión dispersa los elementos correctamente entre los cubos. La iteración sobre este conjunto requiere un tiempo proporcional a la suma del tamaño de la instancia HashSet (el número de elementos) más la "capacidad" de la instancia Backing HashMap (el número de segmentos). Por lo tanto, es muy importante no establecer la capacidad inicial demasiado alta (o el factor de carga demasiado baja) si iteración rendimiento es importante
¿Por qué iteración toma tiempo proporcional a la suma (número de elementos en el conjunto + Capacidad del mapa de respaldo) y no solo a la cantidad de elementos en el conjunto mismo?
.
¿Cómo le iterar sobre todos los elementos sin también iterar sobre todos los cubos vacíos? – sepp2k
Relacionados: http://stackoverflow.com/a/11903357/829571 – assylias
También puede [verifique el código] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/ 7-b147/java/util/HashSet.java? Av = f # 168) y profundiza para ver qué sucede debajo del capó. – assylias