¿Diferencia entre SparseArray y Hashmap?
Quiero saber el rendimiento y eficacia entre SparseArray
y HashMap
y cuál es mejor utilizar. no puedo undestand cuándo utilizar SparseArray
y cuando Hashmap
- Cómo escasa variedad difiere de un hashmap en java
- ArrayList <HashMap <String, String >> a String
- RxJava HashMap Transformación
- Establecer clave y valor en el hilador
- Persista HashMap en ORMLite
- Cómo almacenar HashMap en Android?
- ¿Cómo puedo almacenar un HashMap <Integer, String> en android usando preferencias compartidas?
- Agregar múltiples entradas a un HashMap a la vez en una sentencia
- Cómo imprimir todas las claves y valores de HashMap en Android?
- Java.lang.NullPointerException: println necesita un mensaje
- ¿Por qué GSON poner un punto decimal y un cero después de todos mis números JSON que originalmente no contienen ningún decimal?
- Recibí un error de complición _GLIBCXX_PERMIT_BACKWARD_HASH en android NDK al usar hash_map
- Obtener valores de ArrayList <HashMap <String, String >>
SparseArray
es la elección que debe hacer cuando su clave de mapa es un entero, y esos números enteros no son secuenciales, es decir, no 0, 1, 2, 3, 4, … n – sino más bien 43, 2045, 12, 5 .
Ahora, supongamos por un momento que sus claves eran números enteros, pero también secuenciales (0, 1, 2, 3, 4, … n). ¿Cuál sería la mejor opción de colección en este caso? Bueno, vamos a suponer que sus valores son Strings
. En este caso, su mejor opción aquí sería una matriz String[]
( String[]
). La razón de esto es que la serie String
responde a todas sus necesidades con un mínimo impacto en el rendimiento.
myStringArray[0]
devolverá el valor String
de la clave '0', y así sucesivamente.
SparseArray
funciona exactamente igual a esto, excepto que permitimos que algunos valores dentro de la matriz estén vacíos (por lo tanto, 'sparse'). Un SparseArray
creará un arreglo grande detrás de las escenas, y utilizará las llaves enteras como los índices del arsenal donde se colocan los valores.
Esencialmente, HashMaps
también funcionan de esta manera – detrás de las escenas hay una gran matriz de números enteros que se utiliza para colocar valores. La única diferencia es que en HashMaps
, las claves no son números enteros, podrían ser cualquier cosa. Por el bien de nuestro ejemplo, digamos que las teclas son Strings
. Lo que hará un HashMap
es que utilizará una función de hash para convertir esta clave de String
en un entero, a continuación, utilizarlo para colocar el valor en la matriz. Esto puede llevar a casos en que dos Strings
diferentes producen los mismos números enteros. En estos casos, el HashMap
realizará otra operación, como poner en cola valores en la matriz, o producir una nueva clave, y así sucesivamente. Esto, y la producción de una clave entera a través de una función hash, a veces puede implicar un poco de rendimiento.
SparseArray
permite saltar esto completamente ya que con claves enteras, nada de esto es necesario, y por lo tanto es más eficiente.
La documentación de Android para un SparseArray dice
-
Generalmente es más lento que un HashMap tradicional, ya que las búsquedas requieren una búsqueda binaria y agrega y elimina requiere insertar y
borrando entradas en la matriz. -
Se pretende que la memoria sea más eficiente que usar un HashMap para asignar números enteros a objetos, tanto
porque evita las claves de auto-boxeo y su estructura de datos no
confiar en un objeto de entrada adicional para cada asignación.
Así, en resumen; Los arreglos dispersos se pueden usar para reemplazar los mapas hash cuando la clave es un tipo primitivo.
- SQLiteAssetHelper: No se pudo abrir la base de datos para escribir (intentará leer sólo)
- Problema de actualización de Android Studio 2.2.2 LLDB 2.2