注册建设网站的公司,东莞网站设计找谁,如何做弹幕视频网站,学校ui设计培训简介#xff1a; CSDN博客专家#xff0c;专注Android/Linux系统#xff0c;分享多mic语音方案、音视频、编解码等技术#xff0c;与大家一起成长#xff01; 优质专栏#xff1a;Audio工程师进阶系列【原创干货持续更新中……】#x1f680; 优质专栏#xff1a;多媒… 简介 CSDN博客专家专注Android/Linux系统分享多mic语音方案、音视频、编解码等技术与大家一起成长 优质专栏Audio工程师进阶系列【原创干货持续更新中……】 优质专栏多媒体系统工程师系列【原创干货持续更新中……】 人生格言 人生从来没有捷径只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注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 KeyedVectorKEY, 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, spPlaybackThread mPlaybackThreads;
spAudioFlinger::ThreadBase thread mPlaybackThreads.valueFor(ioHandle);
4.实例
#include iostream
#include maptemplate typename KEY, typename VALUE
class KeyedVector
{
};template typename KEY, typename VALUE
class DefaultKeyedVector : public KeyedVectorKEY, 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::mapKEY, VALUE mMap;VALUE mDefault;
};int main() {// 创建一个 DefaultKeyedVector 对象使用默认值进行初始化DefaultKeyedVectorint, 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;
}