Sobes.tech
Middle

Android-də primitiv tipləri əlavə edə bilən xəritələr mövcuddur. Bu barədə daha ətraflı danışa bilərsinizmi?

sobes.tech Süni İntellekt

AI-dan cavab

Bəli, Android SDK-də primitiv tiplərlə işləmək üçün, standart HashMap<K, V> ilə müqayisədə performans və yaddaş qənaətinə yönəlik ixtisaslaşdırılmış Map tətbiqləri mövcuddur.

Ən çox istifadə olunanlar:

  • SparseIntArray: int açarları və int dəyərləri cütlər şəklində saxlayır.
  • SparseLongArray: int açarları və long dəyərləri cütlər şəklində saxlayır.
  • SparseBooleanArray: int açarları və boolean dəyərləri cütlər şəklində saxlayır.
  • LongSparseArray<E>: long açarları və E tipli obyektləri saxlayır.

Bu siniflərin istifadəsinin üstünlükləri:

  • Yaddaş səmərəliliyi: Daxili massivlərdən istifadə edirlər, bu da Integer, Long, Boolean kimi primitiv tiplər üçün obyektlərin yaradılması və HashMap-in əlaqəli siyahı strukturunun əlavə xərclərindən qaçınır.
  • Performans: Əlavə etmə, əldə etmə və silmə əməliyyatları ümumiyyətlə daha sürətlidir, xüsusən çox sayda elementlə işləyərkən, daha sadə daxili struktur və primitiv açarlar üçün hashləmənin qarşısını almaq sayəsində.

SparseIntArray istifadə nümunəsi:

// SparseIntArray yaradılması
SparseIntArray sparseArray = new SparseIntArray();

// Elementlərin əlavə olunması
sparseArray.put(0, 100);
sparseArray.put(1, 200);
sparseArray.put(10, 300);

// Açar ilə dəyər əldə etmək
int value = sparseArray.get(1); // dəyər 200 olacaq

// Standart dəyər ilə dəyər əldə etmək
int valueWithDefault = sparseArray.get(5, -1); // dəyər -1 olacaq

// Elementi açar ilə silmək
sparseArray.delete(10);

// Elementlər üzərində dövr etmək
for (int i = 0; i < sparseArray.size(); i++) {
    int key = sparseArray.keyAt(i);
    int val = sparseArray.valueAt(i);
    // key və val işləmə loqikası
}

Eynilə, SparseLongArray, SparseBooleanArrayLongSparseArray istifadə olunur. LongSparseArray obyekt tipini göstərməyi tələb edir, çünki onun dəyərləri obyektlərdir və primitiv tiplər deyil.

Standart HashMap və ixtisaslaşdırılmış Sparse xəritələr arasındakı seçim tələblərinizə bağlıdır:

  • Əgər açarlar hər hansı obyektlər və ya int və ya long olmayan primitiv tiplərdirsə, HashMap istifadə edin.
  • Əgər açarlar int və ya long və dəyərlər primitiv tiplər və ya LongSparseArray halında obyektlərdirsə, və yaddaş və performans vacibdirsə, Sparse xəritələr daha üstün olacaq.

Qeyd etmək lazımdır ki, Sparse xəritələr çoxnüvəli təhlükəsiz deyil. Əgər çoxnüvəli təhlükəsizlik lazımdırsa, primitiv tiplər üçün obyekt sarmalayıcılar ilə ConcurrentHashMap istifadə etməyi düşünün. Lakin, Android tətbiqinin UI axınında, bu strukturlar tez-tez istifadə olunduğundan, çoxnüvəli təhlükəsizlik problem olmur.