Подтвердить что ты не робот

Предупреждение показывает, когда я использую Hash Map In android (используйте новый SparseArray <String>)

Я новичок в разработке в Android. В моем приложении Android я использую HashMap, но я получаю предупреждение:

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

Что это значит и как я могу вместо этого использовать SparseArray<String>?

4b9b3361

Ответ 1

Вместо этого используйте SparseArray<String>(...) для лучшей производительности

Вы получаете это предупреждение из-за описанной причины здесь.

Целые числа карт SparseArrays для объектов. В отличие от обычного массива Объекты могут иметь пробелы в индексах. Предполагается, что это будет больше эффективный, чем использование HashMap для сопоставления целых чисел с объектами.

Теперь

как я использую SparseArray?

Вы можете сделать это ниже:

  • 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);
    
  • 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);
    

Надеюсь, что это поможет.

Ответ 2

SparseArray используется, когда вы используете Integer в качестве ключа.

При использовании SparseArray ключ SparseArray будет оставаться переменной-примитивом, в отличие от того, когда вы используете HashMap где требуется иметь в качестве ключа Object который заставит int стать объектом Integer на короткое время при получении объект на карте.

Используя SparseArray вы сэкономите SparseArray мусора некоторую работу.

Так что используйте как Map<Integer,String>.

Ответ 3

Это подсказка о том, что для вашего кода существует лучшая структура данных.

Это намек от Линта. Обычно вы получаете его, когда у вас есть HashMap целых чисел для чего-то еще.

Его самое большое преимущество - рассматривать целочисленный ключ как примитив. Другими словами, он не будет скрыт от Integer (объекта Java), чтобы использовать его в качестве ключа.

Это большое дело при использовании больших карт. HashMap приведет к созданию многих, многих объектов Integer в этом случае.

См. еще несколько фрагментов информации здесь.

Ответ 4

SparseArray - это более эффективная структура данных, чем HashMap для пар целочисленных ключей и значений. И это специфично для Android, и я считаю, что его нельзя использовать для Java SE.

Иногда предупреждение Linter показывает, что SparseArray должен использоваться, как указано выше. Это глупое предупреждение может быть правильным или неправильным. Вам нужно решить использовать SparseArray, а не HashMap, если вы считаете это подходящим или вам нужно подавить его с помощью аннотации @SuppressLint.

Чтобы решить, следует ли внедрять, стоит провести небольшое исследование и оценить вашу ситуацию. Вы можете найти все полезные ссылки здесь

https://gunhansancar.com/sparsearray-vs-hashmap/

https://developer.android.com/reference/android/util/SparseIntArray