相关推荐recommended
Android14之DefaultKeyedVector实现(一百八十二)
作者:mmseoamin日期:2024-01-23

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀

优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

Android14之DefaultKeyedVector实现(一百八十二),欢迎关注Android系统攻城狮,第1张

1.前言

本篇目的:Android14之AudioFlinger如何使用和实现DefaultKeyedVector。

2.DefaultKeyedVector类介绍

  • DefaultKeyedVector类是Android开发中常用的一个数据结构,用于存储键值对数据。它继承自KeyedVector类,并在其基础上添加了键值对的存储和管理功能。DefaultKeyedVector类的主要作用是提供一个高效的方式来存储和操作键值对数据,并且在数据量较大时能够保持较低的内存占用和性能消耗。

  • 与普通的Map类相比,DefaultKeyedVector类在一些场景下具有更好的性能表现。由于Android系统中对SparseArray类进行了优化,它在处理稀疏数据(大部分数据为空)时表现更加高效。因此,当需要存储大量键值对数据,且大部分数据为空时,DefaultKeyedVector类是一个更好的选择。

  • DefaultKeyedVector类提供了一系列方法来实现对键值对数据的操作,包括添加键值对、删除键值对、获取键值对数量、通过键获取值等功能。此外,DefaultKeyedVector类还提供了遍历键值对数据的方法,便于对数据进行批量处理。

  • 在Android开发中,DefaultKeyedVector类常用于需要高效存储大量键值对数据的场景,比如在ListView、RecyclerView等列表控件中,用于存储列表项的数据。它能够在保证性能的同时,节约内存消耗,适用于移动设备资源有限的情况。

  • 在处理大量键值对数据时能够提供较高的性能和较低的内存占用。使用DefaultKeyedVector类能够有效地提升应用程序的性能和响应速度,是开发中值得使用的工具之一。

    3.AudioFlinger如何使用DefaultKeyedVector

    <1>.DefaultKeyedVector定义

    template 
    class DefaultKeyedVector : public KeyedVector
    {
    public:
        inline                  DefaultKeyedVector(const VALUE& defValue = VALUE());
                const VALUE&    valueFor(const KEY& key) const;
    private:
                VALUE                                           mDefault;
    };
    

    <2>.AudioFlinger使用DefaultKeyedVector

    DefaultKeyedVector< audio_io_handle_t, sp >  mPlaybackThreads;
    sp thread = mPlaybackThreads.valueFor(ioHandle);
    

    4.实例

    #include 
    #include 
    template 
    class KeyedVector
    {
    };
    template 
    class DefaultKeyedVector : public KeyedVector
    {
    public:
      inline DefaultKeyedVector(const VALUE& defValue = VALUE()) : mDefault(defValue){ }
      const VALUE& valueFor(const KEY& key) const{
        auto it = mMap.find(key);
        if (it != mMap.end()) {
          return it->second;
        } else {
          return mDefault;
        }
      }
      void setValueFor(const KEY& key, const VALUE& value)
      {
        mMap[key] = value;
      }
    private:
      std::map mMap;
      VALUE  mDefault;
    };
    int main() {
      // 创建一个 DefaultKeyedVector 对象,使用默认值进行初始化
      DefaultKeyedVector vec;
      // 设置一个键的值
      vec.setValueFor(1, "one");
      vec.setValueFor(2, "two");
      // 获取一个键的值
      std::string value = vec.valueFor(2);
      // 打印结果
      std::cout << "Value for key 1: " << vec.valueFor(1) << std::endl;
      std::cout << "Value for key 2: " << value << std::endl;
      return 0;
    }