Android14之DefaultKeyedVector实现(一百八十二)

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

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

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

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

欢迎关注Android系统攻城狮

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 <typename KEY, typename VALUE>
class DefaultKeyedVector : public KeyedVector<KEY, VALUE>
{
   
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<PlaybackThread> >  mPlaybackThreads;
sp<AudioFlinger::ThreadBase> thread = mPlaybackThreads.valueFor(ioHandle);

4.实例

#include <iostream>
#include <map>

template <typename KEY, typename VALUE>
class KeyedVector
{
   
};

template <typename KEY, typename VALUE>
class DefaultKeyedVector : public KeyedVector<KEY, VALUE>
{
   
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<KEY, VALUE> mMap;
  VALUE  mDefault;
};

int main() {
   
  // 创建一个 DefaultKeyedVector 对象,使用默认值进行初始化
  DefaultKeyedVector<int, std::string> 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;
}

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-19 10:32:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-19 10:32:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-19 10:32:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-19 10:32:01       20 阅读

热门阅读

  1. 自然语言处理-词向量技术

    2024-01-19 10:32:01       28 阅读
  2. 新概念:组织度,组织力,组织熵,自组织度

    2024-01-19 10:32:01       32 阅读
  3. AIGC技术在公益领域的创新应用

    2024-01-19 10:32:01       33 阅读
  4. jQuery —— W3school 详解 简单易懂 (一)

    2024-01-19 10:32:01       33 阅读
  5. 自动安装解压版mysql8的脚本

    2024-01-19 10:32:01       34 阅读
  6. _198打家劫舍

    2024-01-19 10:32:01       36 阅读
  7. 设计模式-外观模式

    2024-01-19 10:32:01       34 阅读
  8. Python算法题集_两数之和

    2024-01-19 10:32:01       36 阅读
  9. 基于STM32F103的智能书房系统的设计

    2024-01-19 10:32:01       32 阅读
  10. 112. 路径总和

    2024-01-19 10:32:01       36 阅读
  11. 【QA】Linux-CentOS-解决mysqlclient无法安装

    2024-01-19 10:32:01       38 阅读