Android SparseArray avec les clés de la Chaîne?
J'ai besoin d'utiliser une table de hachage pour stocker les clés /valeurs dans mon application Android (potentiellement des milliers), mais je comprends que je devrais être à l'aide de SparseArray afin d'économiser de la mémoire. Cependant, ma clé doit être une Chaîne de caractères. Est-il un moyen de créer un personnalisé de mise en œuvre de la SparseArray ou une autre alternative?
Vous devez vous connecter pour publier un commentaire.
SparseArray est seulement une chose lorsque les entiers sont la clé. C'est une optimisation de la mémoire qui est seulement possible avec des valeurs entières parce que vous avez besoin à la recherche binaire les touches. Binaire de recherche sur les chaînes de caractères sont cher et pas bien définie (doit - '1' être inférieure ou supérieure à " a "ou de" fou de caractères japonais'?), donc ils ne le font pas.
BTW, SparseArray économise de la mémoire, mais peut prendre plus de temps. Un get sur une table de hachage doit être O(n/taille) où la taille est le nombre de compartiments dans la table de hachage. SparseArray va être O(log(n)). Pour utiliser dépend de la mémoire et de la vitesse dont vous avez besoin. Si vous avez vraiment grande (100 kéch. d'entrées), vous aurez même de courir dans la mémoire de pagination questions où les réalités physiques de passe en cache peut causer le plus HashMap à faire mieux, même si techniquement le pire, car il aura un max de 1 cache miss par obtenir, alors qu'une recherche binaire peut en avoir plusieurs.
Vous pouvez utiliser ArrayMap : ArrayMap est un générique de touche->valeur de cartographie de la structure de données qui est conçu pour être plus efficace en terme de mémoire que les HashMap
Pour plus d'informations : ArrayMap Doc
Vous pouvez utiliser le hashCode de la chaîne -> machaine.hashCode()
SparseArray
est une classe spécialisée pour les cartes qui ont entiers que le type de clé. En gros, ils utilisent ce fait pour enregistrer la valeur int au lieu d'une référence à un objet Integer (d'où les économies de mémoire).Il n'y a rien d'intrinsèquement mauvais avec l'aide d'un standard
HashMap
lorsque la clé est de tout autre type.