Android diccionario TreeSet tiempo de carga más rápido
Tengo como 300000 palabras en mi diccionario (realmente guardado en formato txt (nueva línea delimitada) en sdcard de mi dispositivo Android). Quiero construir la estructura de datos que tomaría menos tiempo como sea posible para insertar palabras (String-s) de mi archivo txt en esta estructura de datos. Y este DS debe ser super rápido para comprobar si las palabras existen en el diccionario (este DS) o no. He intentado varios build-in DS y el más rápido IMO fue TreeSet. ¿Hay algún otro DS (no incorporado) que sería más rápido en insertar / crear DS y igual de igual que TreeSet para buscar?
Y una cosa más es que de alguna manera puedo "ayudar" a TreeSet a ser más rápido en insertar reorganizando mi archivo txt (poner las palabras en el orden correcto).
- Rendimiento de la serialización y Google Android
- ¿Gradle escala de rendimiento bien con el número de núcleos de la CPU
- ¿Cómo configurar el desplazamiento perfomance para webview?
- Android: patrón de ViewHolder y diferentes tipos de filas?
- ¿Es una buena idea escribir juegos para móviles en ActionScript3 en lugar de Java / Objective-C?
Saludos
- No se puede abrir el archivo open_gapps-arm-6.0-stock-20160220 en genymotion?
- ¿Dónde ejecutar algoritmos complejos? Lado del servidor o lado del cliente?
- Desempeño de Android: "Evita los internos y los setters"
- ¿Por qué Android prefiere las clases estáticas?
- Reserva de almacenamiento interno del dispositivo Android para futuros registros críticos de aplicaciones
- ¿Cómo puedo eliminar los recursos no utilizados de las bibliotecas de terceros que he incluido en Android?
- El buscapersonas de vista automática hace que los fotogramas se descarguen
- Mi aplicación se redujo significativamente en Android 4.0
En primer lugar, bien hecho en la experimentación para encontrar la mejor estructura para su aplicación. A menudo la gente discute sin probar varias opciones para obtener datos de rendimiento real.
Si desea guardar el tiempo de construcción, y el archivo de palabras no cambia muy a menudo, la mejora de velocidad de compilación obvia es almacenar en caché la estructura de datos. Sea cual sea la estructura de datos que esté utilizando, construya la estructura una vez y guarde la estructura en la tarjeta SD (en lugar de almacenar las cadenas). Las estructuras estándar de java.util se pueden almacenar usando Serialization .
Si desea más rápido tiempo de construcción, y su lista de palabras se clasifica en orden alfabético, o puede ser, entonces sólo podría almacenar en una matriz de cadenas. El tiempo de compilación será muy rápido otra vez, y el tiempo de búsqueda será similar a un TreeSet (usando Arrays.binarySearch () ).
Si desea una búsqueda más rápida, es posible que desee comprobar Perfect Hash ing o Trie s, pero estos no están en las bibliotecas estándar de Java.
Un trie será mucho más memoria eficiente que cualquiera de éstos, que puede hacerlo más rápido. ( Información sobre cómo encontrar una implementación )
Me sorprende que TreeSet sea más rápido que HashSet en sus experimentos, lo que significa que podría estar operando en una situación donde la asignación de memoria es costosa. ¿Recuerda ajustar la capacidad inicial cuando asignó el HashSet? Recuerde evitar un rehash costoso, usted necesita fijar la capacidad inicial a por lo menos el número de items / 0.75 (el factor de carga).
- Mantenga un archivo apk en otro archivo apk
- ¿Cómo desvelar el texto seleccionado en Edittext Android?