Предупреждение показывает, когда я использую хэш-карту в android(используйте новый SparseArray)


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

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

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

3 64

3 ответа:

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

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

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

теперь

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

вы можете сделать это следующими способами:

  1. 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);
    
  2. 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);
    

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

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

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

С помощью SparseArray вы сохраните Сборщик Мусора некоторые работы.

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

это намек на то, что есть лучшая структура данных для вашего кода.

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

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

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

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