警告显示当我使用散列地图在Android(使用新的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
, 键在所有项目中都将保留为原始variables ,与使用HashMap
时不同的是,它需要有一个Object
作为一个键 ,这会导致int成为一个Integer
对象 ,地图中的对象。
通过使用SparseArray
您将保存垃圾收集器的一些工作。
所以就像一个Map<Integer,String>
。
这暗示你的代码有一个更好的数据结构。
这个提示来自Lint。 当你有一个整数的HashMap
到别的东西时你通常会得到它。
其最大的优点是把整数键作为一个原语。 换句话说,它不会转换为Integer
(Java对象)来使用它作为关键字。
使用大型地图时,这是一个大问题。 在这种情况下, HashMap
将导致创build许多Integer
对象。
在这里看到更多的信息。