¿Por qué SparseIntArray no implementa Map <Integer, Integer>?
La documentación del API para SparseIntArray de Android se abre con:
SparseIntArrays mapea enteros a enteros.
Tengo curiosidad, entonces, por qué no implementa Map <Integer, Integer> .
Me parece que todo lo que habría sido necesario es un par de nombres de métodos diferentes, unos pocos métodos adicionales trivial, y un poco de código para prohibir null
claves null
y valores … sin duda nada que un EnumMap no maneja con gracia. ¿Estoy pasando por alto algo?
Esto no pretende ser un golpe en los diseñadores de la API de Android. Normalmente, cuando me pregunto cosas como esta , resulta ser una buena razón, y aprendo algo sobre el idioma o la plataforma.
- Android simular pulsaciones de teclas
- ¿Cómo obtener una vista desde dentro de Espresso para pasar a un IdlingResource?
- ¿Cómo puedo mantener el estado al cambiar entre las pestañas / fragmentos de la barra de acción?
- Cómo resolver "El contenido del adaptador ha cambiado pero ListView no ha recibido una notificación" excepción
- Vista de Android que desaparece cuando se sale de los padres
- Aplicación generador de trayecto para android
- API de gráficos para Android
- ¿Cómo puede una aplicación Android funcionar como un controlador remoto a una aplicación de escritorio? (Spotify)
JavaDoc para SparseIntArray también dice
SparseIntArrays mapea enteros a enteros. A diferencia de una matriz normal de enteros, puede haber vacíos en los índices. Se pretende que sea más eficiente en la memoria que usar un HashMap para asignar números enteros a enteros , ya que evita las claves y los valores de autococking y su estructura de datos no se basa en un objeto de entrada adicional para cada correlación.
Podemos derivar las siguientes razones para la elección de SparseIntArray sobre Map <Integer, Integer>:
- Dado que queríamos tener mapping entre primitivas, sería bueno evitar el autoboxing.
- En Map, tener un objeto como clave / valor viene con pesadez de cálculo de hash, resolución de colisión de hash, vinculación de múltiples entradas en un solo cubo, etc. Esto no será necesario ya que estamos tratando con pares clave / valor primitivos. Tenga en cuenta que SparseIntArray viene con advertencia de rendimiento. Dado que los valores se almacenan en la estructura de datos binarios de la matriz de árbol de búsqueda, las inserciones y eliminaciones serán operaciones costosas. Por lo tanto, su una buena opción para el pequeño conjunto de datos.
Como un punto secundario, yo diría que JavaDoc debería ser más específico diciendo
"SparseIntArrays mapea enteros primitivos a enteros."
En lugar de decir
"SparseIntArrays mapea enteros a enteros."
-
Implementar
Map
es muy pesado. Necesita métodos comoentrySet
ykeySet
que no es conveniente enSparseIntArray
. -
Las claves de mapa son Objetos, por lo que se necesita un encajonamiento / descompresión constante.
-
SparseIntArray
sugiere una forma diferente de enumerar a través de unMap
, utilizando sukeyAt
específico yvalueAt
, que son muy rápidos.
Si SparseIntArray
implementó Map<Integer, Integer>
se sentiría tentado a escribir:
Map<Integer, Integer> intMap = new SparseIntArray();
Pero entonces usted estaría atascado con sólo qué capacidad de enumeración Map
proporciona.
Si implementó Map<Integer,Integer>
, tendría que tratar con objetos Integer
como valores de entrada y salida en lugar de valores int
primitivos, de modo que se perdería el punto completo de esta clase que es evitar el boxeo.
- El mismo diseño para dispositivos grandes y grandes
- FragmentPagerAdapter no restaura fragmentos al cambiar de orientación