65 votes

L’avertissement indique quand j’utilise Hash Map dans Android (Utiliser le nouveau SparseArray <String> )

Je suis novice dans le développement d'Android. J'utilise HashMap dans mon application Android, mais je reçois un avertissement:

 **"Use new SparseArray<String>(...) instead for better performance"**
 

Qu'est-ce que cela signifie et comment puis-je utiliser SparseArray<String> place?

117voto

Bhavesh Patadiya Points 11043
Use new SparseArray<String>(...) instead for better performance

vous recevez cette Alerte car, comme Décrit Ici

SparseArrays carte entiers à des Objets. Contrairement à un tableau normal de Les objets, il peut y avoir des lacunes dans les indices. Il est destiné à être plus efficace que l'utilisation d'une table de hachage à la carte Entiers à des Objets.

Maintenant

comment j'utilise SparseArray ?

vous pouvez le Faire En Dessous de la Sorte :

Voici le Code Fait Avec Hashmap :

Map<Integer, Bitmap> _bitmapCache = new HashMap<Integer, Bitmap>();
   private void fillBitmapCache() {
        _bitmapCache.put(R.drawable.icon, BitmapFactory.decodeResource(getResources(), R.drawable.icon));
        _bitmapCache.put(R.drawable.abstrakt, BitmapFactory.decodeResource(getResources(), R.drawable.abstrakt));
        _bitmapCache.put(R.drawable.wallpaper, BitmapFactory.decodeResource(getResources(), R.drawable.wallpaper));
        _bitmapCache.put(R.drawable.scissors, BitmapFactory.decodeResource(getResources(), 
    }

Bitmap bm = _bitmapCache.get(R.drawable.icon);

Et Voici le code avec l'Aide de SparseArray :

SparseArray<Bitmap> _bitmapCache = new SparseArray<Bitmap>();
   private void fillBitmapCache() {
        _bitmapCache.put(R.drawable.icon, BitmapFactory.decodeResource(getResources(), R.drawable.icon));
        _bitmapCache.put(R.drawable.abstrakt, BitmapFactory.decodeResource(getResources(), R.drawable.abstrakt));
        _bitmapCache.put(R.drawable.wallpaper, BitmapFactory.decodeResource(getResources(), R.drawable.wallpaper));
        _bitmapCache.put(R.drawable.scissors, BitmapFactory.decodeResource(getResources(), 
    }

Bitmap bm = _bitmapCache.get(R.drawable.icon);

J'espère que ça Aidera.

42voto

SparseArray est utilisé lorsque vous utilisez un Entier comme une Clé. Lors de l'utilisation du tableau fragmenté la clé restera comme une primitive de la variable à tous les éléments à la différence lorsque vous utilisez la table de hachage où il est nécessaire d'avoir un objet comme une clé qui sera la cause de l' int pour devenir un objet Integer juste pour un court laps de temps lors de l'obtention de l'objet dans la carte.

À l'aide de la SparseArray vous permettra d'économiser le Garbage Collector de quelques travaux.

Donc de l'utiliser comme un Map<Integer,String>.

Cheers!:)

5voto

chr Points 1918

C'est un indice qu'il y a une meilleure structure de données pour votre code.

L'astuce est de les Peluches. Vous obtenez habituellement quand vous avez une table de hachage d'entiers à autre chose.

Son plus grand avantage est de traiter la clé entière comme un primitif. En d'autres termes, il ne sera pas secrètes à un Entier (de l'objet Java) pour l'utiliser comme une clé.

C'est un gros problème lors de l'utilisation de cartes de grande taille. HashMap entraînera la création de nombreux, de nombreux Entier des objets dans ce cas.

Voir un peu plus d'information dans https://groups.google.com/forum/?fromgroups=#!topic/android-développeurs/G-ceop4xp48

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X