Sobes.tech
Middle

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: int kalitlar va int qiymatlarni juftlik sifatida saqlaydi.
  • SparseLongArray: int kalitlar va long qiymatlarni saqlaydi.
  • SparseBooleanArray: int kalitlar va boolean qiymatlarni saqlaydi.
  • LongSparseArray<E>: long kalitlar va E turidagi obyektlarni saqlaydi.

Ushbu sinflardan foydalanishning afzalliklari:

  • Xotira samaradorligi: Ular ichki massivlardan foydalanadi, bu esa Integer, Long, Boolean kabi primitiv turlar uchun ob'ektlarni yaratish va HashMap ning 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 int yoki long bo'lmagan primitiv turlar bo'lsa, HashMap dan foydalaning.
  • Agar kalitlar int yoki long bo'lsa va qiymatlar primitiv turlar yoki LongSparseArray holatida 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.