Androidda, primitiv turlarni qo'shish mumkin bo'lgan xaritalar mavjud. Bu haqida batafsilroq ayta olasizmi?
sobes.tech AI
AIdan javob
Ha, Android SDK uchun, primitiv turlar bilan ishlash uchun, standart HashMap<K, V> ga nisbatan ishlash va xotira tejash uchun optimallashtirilgan maxsus Map amalga oshirishlar mavjud.
Eng keng tarqalganlari:
SparseIntArray:intkalitlar vaintqiymatlarni juftlik sifatida saqlaydi.SparseLongArray:intkalitlar valongqiymatlarni saqlaydi.SparseBooleanArray:intkalitlar vabooleanqiymatlarni saqlaydi.LongSparseArray<E>:longkalitlar vaEturidagi obyektlarni saqlaydi.
Ushbu sinflardan foydalanishning afzalliklari:
- Xotira samaradorligi: Ular ichki massivlardan foydalanadi, bu esa
Integer,Long,Booleankabi primitiv turlar uchun ob'ektlarni yaratish vaHashMapning bog'langan ro'yxat tuzilmasi bilan bog'liq xarajatlarni oldini oladi. - Ishlash tezligi: Qo'shish, olish va o'chirish operatsiyalari odatda tezroq bo'ladi, ayniqsa ko'p element bilan ishlaganda, ichki tuzilma soddaroq va primitiv kalitlar uchun hash qilishdan qochish imkonini beradi.
SparseIntArray dan foydalanish misoli:
// SparseIntArray yaratish
SparseIntArray sparseArray = new SparseIntArray();
// Elementlar qo'shish
sparseArray.put(0, 100);
sparseArray.put(1, 200);
sparseArray.put(10, 300);
// Kalit bo'yicha qiymat olish
int value = sparseArray.get(1); // qiymat 200 bo'ladi
// Standart qiymat bilan qiymat olish
int valueWithDefault = sparseArray.get(5, -1); // qiymat -1 bo'ladi
// Elementni kalit bo'yicha o'chirish
sparseArray.delete(10);
// Elementlar bo'yicha aylanma
for (int i = 0; i < sparseArray.size(); i++) {
int key = sparseArray.keyAt(i);
int val = sparseArray.valueAt(i);
// kalit va qiymatni ishlash logikasi
}
Shuningdek, SparseLongArray, SparseBooleanArray va LongSparseArray ham ishlatiladi. LongSparseArray ning qiymatlari obyektlar bo'lib, turini aniqlash talab qilinadi.
Standart HashMap va maxsus Sparse xaritalar orasidagi tanlov sizning talablaringizga bog'liq:
- Agar kalitlar har qanday obyektlar yoki
intyokilongbo'lmagan primitiv turlar bo'lsa,HashMapdan foydalaning. - Agar kalitlar
intyokilongbo'lsa va qiymatlar primitiv turlar yokiLongSparseArrayholatida obyektlar bo'lsa, va xotira va ishlash tezligi muhim bo'lsa, Sparse xaritalar afzalroq.
E'tibor bering, Sparse xaritalar oqim xavfsiz emas. Agar oqim xavfsizligini ta'minlash kerak bo'lsa, ConcurrentHashMap ni primitiv turlar uchun ob'ektlar bilan ishlatishni o'ylab ko'ring. Biroq, Android ilovasining UI oqimida, bu tuzilmalar ko'pincha ishlatiladigan joylarda, oqim xavfsizligi muammo emas.