我是新来的开发Android。 在我的Android应用我使用HashMap
,但我发现了一个警告:
**"Use new SparseArray<String>(...) instead for better performance"**
这是什么意思,我如何使用SparseArray<String>
呢?
我是新来的开发Android。 在我的Android应用我使用HashMap
,但我发现了一个警告:
**"Use new SparseArray<String>(...) instead for better performance"**
这是什么意思,我如何使用SparseArray<String>
呢?
使用新的
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);
希望这将有助于。
SparseArray
是当你使用的是使用Integer
作为重点。
当使用SparseArray
, 关键就会留在这里。在任何时候,当您使用不同于原始变量 HashMap
它需要有一个Object
作为重点 ,这将导致INT成为一个Integer
对象只是很短的时间,而得到在地图中的对象。
通过使用SparseArray
你将节省垃圾收集一些工作。
因此,使用就像一个Map<Integer,String>
。
这是一个暗示,有您的代码更好的数据结构。
这提示是从皮棉。 你通常会得到它,当你有一个HashMap
整数别的东西。
它的最大优点是治疗整数键作为原始。 换句话说,它不会以隐蔽的Integer
(在Java对象)来使用它作为一个重点。
使用大地图时,这是一个大问题。 HashMap
会导致产生很多很多的Integer
在这种情况下的对象。
看到更多条信息在这里 。
SparseArray比HashMap的整数键值对更好的内存有效的数据结构。 它是专门针对Android和我相信它不能用于Java SE的。
有时候,短绒警告显示,SparseArray必须使用如上面。 这愚蠢的警告可能是对还是错。 您需要决定使用SparseArray而HashMap类,如果你觉得合适,或者您需要@SuppressLint注释压制它。
要决定是否实施,这是值得做一点点研究,并评估自己的情况。 你可以在这里找到所有的一些有用的链接
https://gunhansancar.com/sparsearray-vs-hashmap/
https://developer.android.com/reference/android/util/SparseIntArray