簡介: CSDN博客專家,專注Android/Linux系統(tǒng),分享多mic語音方案、音視頻、編解碼等技術(shù),與大家一起成長!
優(yōu)質(zhì)專欄:Audio工程師進(jìn)階系列【原創(chuàng)干貨持續(xù)更新中……】??
優(yōu)質(zhì)專欄:多媒體系統(tǒng)工程師系列【原創(chuàng)干貨持續(xù)更新中……】??
人生格言: 人生從來沒有捷徑,只有行動(dòng)才是治療恐懼和懶惰的唯一良藥.
1.前言
本篇目的:Android14之AudioFlinger如何使用和實(shí)現(xiàn)DefaultKeyedVector。
2.DefaultKeyedVector類介紹
-
DefaultKeyedVector類是Android開發(fā)中常用的一個(gè)數(shù)據(jù)結(jié)構(gòu),用于存儲鍵值對數(shù)據(jù)。它繼承自KeyedVector類,并在其基礎(chǔ)上添加了鍵值對的存儲和管理功能。DefaultKeyedVector類的主要作用是提供一個(gè)高效的方式來存儲和操作鍵值對數(shù)據(jù),并且在數(shù)據(jù)量較大時(shí)能夠保持較低的內(nèi)存占用和性能消耗。
-
與普通的Map類相比,DefaultKeyedVector類在一些場景下具有更好的性能表現(xiàn)。由于Android系統(tǒng)中對SparseArray類進(jìn)行了優(yōu)化,它在處理稀疏數(shù)據(jù)(大部分?jǐn)?shù)據(jù)為空)時(shí)表現(xiàn)更加高效。因此,當(dāng)需要存儲大量鍵值對數(shù)據(jù),且大部分?jǐn)?shù)據(jù)為空時(shí),DefaultKeyedVector類是一個(gè)更好的選擇。
-
DefaultKeyedVector類提供了一系列方法來實(shí)現(xiàn)對鍵值對數(shù)據(jù)的操作,包括添加鍵值對、刪除鍵值對、獲取鍵值對數(shù)量、通過鍵獲取值等功能。此外,DefaultKeyedVector類還提供了遍歷鍵值對數(shù)據(jù)的方法,便于對數(shù)據(jù)進(jìn)行批量處理。
-
在Android開發(fā)中,DefaultKeyedVector類常用于需要高效存儲大量鍵值對數(shù)據(jù)的場景,比如在ListView、RecyclerView等列表控件中,用于存儲列表項(xiàng)的數(shù)據(jù)。它能夠在保證性能的同時(shí),節(jié)約內(nèi)存消耗,適用于移動(dòng)設(shè)備資源有限的情況。文章來源:http://www.zghlxwxcb.cn/news/detail-805138.html
-
在處理大量鍵值對數(shù)據(jù)時(shí)能夠提供較高的性能和較低的內(nèi)存占用。使用DefaultKeyedVector類能夠有效地提升應(yīng)用程序的性能和響應(yīng)速度,是開發(fā)中值得使用的工具之一。文章來源地址http://www.zghlxwxcb.cn/news/detail-805138.html
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.實(shí)例
#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() {
// 創(chuàng)建一個(gè) DefaultKeyedVector 對象,使用默認(rèn)值進(jìn)行初始化
DefaultKeyedVector<int, std::string> vec;
// 設(shè)置一個(gè)鍵的值
vec.setValueFor(1, "one");
vec.setValueFor(2, "two");
// 獲取一個(gè)鍵的值
std::string value = vec.valueFor(2);
// 打印結(jié)果
std::cout << "Value for key 1: " << vec.valueFor(1) << std::endl;
std::cout << "Value for key 2: " << value << std::endl;
return 0;
}
到了這里,關(guān)于Android14之DefaultKeyedVector實(shí)現(xiàn)(一百八十二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!