我是Android新手。在我的Android应用程序中,我正在使用HashMap
,但我收到了警告:
**"Use new SparseArray<String>(...) instead for better performance"**
这是什么意思,我该如何使用SparseArray<String>
?
答案 0 :(得分:114)
使用新的
SparseArray<String>(...)
代替更高的效果
由于描述here的原因,您收到此警告。
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);
希望它会有所帮助。
答案 1 :(得分:42)
SparseArray
作为密钥时,会使用 Integer
。
使用SparseArray
时,键将始终作为原始变量保留,与您使用HashMap
时不同要求 Object
作为键,这会导致 int成为Integer
对象仅用于在地图中获取对象的时间很短。
使用SparseArray
,您将保存垃圾收集器一些工作。
所以请像Map<Integer,String>
一样使用。
答案 2 :(得分:5)
这暗示您的代码有更好的数据结构。
该提示来自Lint。当你对其他东西有HashMap
个整数时,你通常会得到它。
它的最大优点是将整数键视为基元。换句话说,它不会转换为Integer
(Java对象)将其用作键。
使用大型地图时,这是一个大问题。在这种情况下,HashMap
将导致创建许多Integer
个对象。
查看更多信息here。
答案 3 :(得分:0)
对于整数键值对,SparseArray比HashMap具有更好的内存效率数据结构。而且它特定于Android,我认为它不能用于Java SE。
有时,Linter警告表明必须像上面一样使用SparseArray。这个愚蠢的警告可能是对还是错。如果您认为合适,则需要决定使用SparseArray而不是HashMap,或者需要使用@SuppressLint注释取消显示。
要决定是否实施,值得进行一些研究并评估您的情况。您可以在这里找到所有有用的链接
https://gunhansancar.com/sparsearray-vs-hashmap/
https://developer.android.com/reference/android/util/SparseIntArray