¿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

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

  1. 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.

  2. 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.

  • AutoCompleteTextView onItemClick posición del artículo o id usando HashMap
  • Java.lang.NullPointerException en doInBackground poner HashMap en ArrayList
  • Cómo verificar si existe un valor en HashMap
  • Android - Obtenga el valor de HashMap
  • Quitar elementos de HashMap por clave en java
  • Android: ¿Cómo poner un archivo de imagen de la tarjeta SD a HashMap con simpleadapter?
  • Solicitud de volea de Android usando pares de valor de nombre
  • Creación de Hashmap desde una cadena JSON
  • PutExtra treeMap devuelve HashMap no se puede convertir en TreeMap android
  • Los valores de los hiladores no están ajustados correctamente
  • Java.lang.String no se puede convertir en com.example.expandablelistview.NewsItem
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.