Предупреждение показывает, когда я использую Hash Map In android (используйте новый SparseArray <String>)
Я новичок в разработке в Android. В моем приложении Android я использую HashMap
, но я получаю предупреждение:
**"Use new SparseArray<String>(...) instead for better performance"**
Что это значит и как я могу вместо этого использовать SparseArray<String>
?
Ответы
Ответ 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