在android中使用哈希映射时显示警告(使用新的SparseArray<;String>;)
我对android的开发还不熟悉。在我的android应用程序中,我使用的是在android中使用哈希映射时显示警告(使用新的SparseArray<;String>;),android,hashmap,Android,Hashmap,我对android的开发还不熟悉。在我的android应用程序中,我使用的是HashMap,但我得到了一个警告: **"Use new SparseArray<String>(...) instead for better performance"** **“使用新的SparseArray(…)以获得更好的性能”** 这意味着什么?我如何使用SparseArray 使用新的SparseArray(…)以获得更好的性能 您收到此警告的原因如下所述 SparSearray将整数映射到
HashMap
,但我得到了一个警告:
**"Use new SparseArray<String>(...) instead for better performance"**
**“使用新的SparseArray(…)以获得更好的性能”**
这意味着什么?我如何使用SparseArray
使用新的SparseArray(…)
以获得更好的性能
您收到此警告的原因如下所述
SparSearray将整数映射到对象。不像普通的数组
对象,则索引中可能存在间隙。它的目的是为了更安全
比使用HashMap将整数映射到对象更有效
现在
我如何使用Sparray
您可以通过以下方式完成:
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<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
在您使用整数
作为键时使用
使用SparseArray时,键将始终作为基本变量,这与使用哈希映射
时不同,在使用哈希映射时,需要将对象
作为键,这将导致int成为整数
对象,只需很短时间即可获取地图中的对象
使用SparseArray
可以节省垃圾收集器的一些工作
因此,就像使用
映射一样使用这是一个提示,提示您的代码有更好的数据结构
那暗示来自林特。通常,当您将整数映射到其他对象时,就会得到它
它最大的优点是将整数键视为原语。换句话说,它不会转换为整数(Java对象)以用作键
使用大型地图时,这是一件大事<在这种情况下,code>HashMap
将导致创建大量的Integer
对象
请参阅更多信息。对于整型键值对,SparseArray是比HashMap更好的内存效率数据结构。它是Android特有的,我相信它不能用于JavaSE
有时,Linter警告显示必须如上所述使用SparseArray。这个愚蠢的警告可能是对的,也可能是错的。如果您觉得SparseArray更合适,或者需要使用@SuppressLint注释来抑制它,那么您需要决定使用SparseArray而不是HashMap
为了决定是否实施,值得做一些研究和评估您的情况。你可以在这里找到所有有用的链接
+1,避免HashMap发生的自动装箱(以及相关对象+GC)@cyril mottier在这里写到:从技术上讲,你不是“使用整数作为键”。您使用的是int
。请务必查看链接文档,其中详细说明了“实现不适用于可能包含大量项的数据结构”。SparseArray通常比类似的HashMap慢。我已经阅读了文档,但仍然有一些问题,并阅读了一些关于Java地图的内容。我在HashMap上发现了一些东西:如果hash函数“正确”分散,它为get/put提供了恒定的时间性能。映射允许空键(表不允许)。在稀疏阵列上,文档称使用小数据集时性能更好。多大尺寸?(quote)“对于容纳数百个项目的容器,性能差异小于50%”——我认为这意味着在处理数百个key:value时,稀疏开始失去映射(/table?)。就我而言,我想要稀疏的。表示:“该实现不适用于可能包含大量项的数据结构。它通常比传统的HashMap慢,…”—这意味着:如果您对速度感兴趣,并且希望存储许多值,则必须使用HashMap。