entre - recorrer hashmap java foreach
Java: ¿es una práctica común utilizar una tabla hash(por ejemplo, HashMap) para mapear objetos a sí mismos? (4)
Quiero búsquedas rápidas para ver si una palabra determinada está en el diccionario o no. ¿Cuál sería la mejor estructura de datos de Java para usar para esto?
Este es el uso de libros de texto de un Set
. Puede usar un HashSet
. La implementación ingenua para Set<T>
usa un Map<T, Object>
para simplemente marcar si la entrada existe o no.
Estoy haciendo una aplicación Java que va a almacenar un montón de palabras aleatorias (que se pueden agregar o eliminar de la aplicación en cualquier momento). Quiero búsquedas rápidas para ver si una palabra determinada está en el diccionario o no. ¿Cuál sería la mejor estructura de datos de Java para usar para esto? A partir de ahora, estaba pensando en usar un hashMap, y usar la misma palabra como valor y la clave para ese valor. ¿Es esta práctica común? Usar la misma cadena tanto para la clave como para el valor en un par (clave, valor) me parece extraño, así que quería asegurarme de que no había una mejor idea que yo estuviera pasando por alto.
También estaba pensando en usar alternativamente un treeMap para mantener las palabras ordenadas, dándome un tiempo de búsqueda O (lgn), pero el hashMap debería dar un tiempo esperado de búsqueda O (1) tal como lo entiendo, así que pensé que sería mejor .
Básicamente, solo quiero asegurarme de que la idea de hashMap con las cadenas doblando como clave y valor en cada par (clave, valor) sería una buena decisión. Gracias.
Cualquier clase que sea un Set
debería ayudar a su propósito. Sin embargo, tenga en cuenta que Set
no permitirá duplicados. Para el caso, incluso un Map
no permitirá duplicar claves. Sugeriría usar una ArrayList
(asumiendo que la sincronización no es necesaria) si necesita agregar entradas duplicadas y tratarlas por separado.
Mi única preocupación sería la memoria, si usas el HashSet y si tienes una gran colección de palabras ... Entonces tendrás que cargar toda la colección en la memoria ... Si eso no es un problema .... ( Y su colección debe ser muy grande para que esto sea un problema) ... Entonces el HashSet debería estar bien ... Si realmente tiene una gran colección de palabras, entonces puede intentar usar un árbol, y solo cargar memoriza las partes que te interesan
También tenga en cuenta que la inserción es rápida, pero no tan rápida como en un árbol, recuerde que para que esto funcione, Java insertará cada elemento ordenado. De nuevo, nada importante, pero si agrega muchas palabras a la vez, puede considerar usar un árbol ...
Si lo estás almacenando como una colección de palabras en un diccionario, te sugiero que le eches un vistazo a Tries. Requieren menos memoria que un Set
y tienen tiempos de búsqueda rápida del peor caso O(string length)
.