在android中使用哈希映射时显示警告(使用新的SparseArray<;String>;)

在android中使用哈希映射时显示警告(使用新的SparseArray<;String>;),android,hashmap,Android,Hashmap,我对android的开发还不熟悉。在我的android应用程序中,我使用的是HashMap,但我得到了一个警告: **"Use new SparseArray<String>(...) instead for better performance"** **“使用新的SparseArray(…)以获得更好的性能”** 这意味着什么?我如何使用SparseArray 使用新的SparseArray(…)以获得更好的性能 您收到此警告的原因如下所述 SparSearray将整数映射到

我对android的开发还不熟悉。在我的android应用程序中,我使用的是
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。