2010-06-18 20 views
10

DESCARGO DE RESPONSABILIDAD:
¡Esta pregunta no fue para ser discutida!¿La forma más rápida y eficiente de buscar un par clave-valor en Java?

¿Cuál es la forma más rápida y menos agotadora de buscar un par de clave-valor? Guardaré artículos en una relación clave-valor y necesito acceder a ellos rápidamente. ¿Debo usar una base de datos SQLite? ¿Un mapa? Un Hashtable? ¿Un HashMap? Proporcione algunas ventajas/desventajas de usar cualquier método de búsqueda.

Respuesta

11

Cualquier estructura basada en hash Map es el camino a seguir, siempre que su hash function para la clave sea eficiente. Puede usar id. De valores como resultado de la búsqueda para conservar memoria durante la búsqueda.

Si sus datos ya están en la base de datos, puede dejar esta búsqueda completamente en el RDBMS, después de todo están hechos para esto.

7

Si sus datos están en la memoria, Map s en general son sus amigos, están destinados para esto.

Sin embargo, no utilice un Hashtable. Es mucho más lento que las implementaciones de mapas más recientes. porque sus métodos están sincronizados, lo que la mayoría de las veces no es necesario (y cuando sea necesario, hay una alternativa mucho mejor, ver más abajo).

En contexto de subproceso único, HashMap probablemente estará bien.

Si necesita seguridad de hilo, utilice un ConcurrentHashMap.

+0

¡HashTable NO está sincronizado y es más rápido que ConcurrentHashMap en entornos de un único subproceso si no tiene ningún bloqueo! Si el acceso al mapa es multiproceso, ConcurrentHashMap es realmente la mejor solución. –

+0

@Tobias, "A diferencia de las nuevas implementaciones de colecciones, Hashtable está sincronizado" - de http://java.sun.com/j2se/1.5.0/docs/api/java/util/Hashtable.html –

+1

Como estamos hablando sobre semántica ... "La implementación' ConcurrentHashMap' funciona mejor que 'HashMap' en casi todas las situaciones. También permite lecturas y escrituras concurrentes simultáneas, y tiene métodos que soportan operaciones compuestas comunes que de otro modo no son seguras para hilos. el entorno de despliegue, comience con 'ConcurrentHashMap'." * Código limpio: un manual de software ágil, Robert C. Martin, p.183 * – Esko

Cuestiones relacionadas