Sobes.tech
Middle

Android-ში არსებობს რუკები, რომელთა რომელშიც primitive ტიპებს შეიძლება დაამატოთ. შეგიძლიათ ამის შესახებ უფრო დეტალურად ისაუბროთ?

sobes.tech AI

პასუხი AI-სგან

Әйе, Android SDKда primitives белән эшләү өчен махсус гамәлгә ашырылулар бар, алар стандарт HashMap<K, V> белән чагыштырганда эшләү һәм хәтерне саклау өчен оптимальләштерелгән.

Иң еш кулланыла торган:

  • SparseIntArray: int ачкычлар һәм int кыйммәтләр саклый.
  • SparseLongArray: int ачкычлар һәм long кыйммәтләр саклый.
  • SparseBooleanArray: int ачкычлар һәм boolean кыйммәтләр саклый.
  • LongSparseArray<E>: long ачкычлар һәм E төрендәге объектлар саклый.

Бу классларны куллануның өстенлекләре:

  • Хәтернең нәтиҗәлелеге: Алар эчке массивларны кулланып, primitives өчен объектларны ясау чыгымнарын һәм HashMap структурасыннан качалар.
  • Үзләштерү: Керү, алу һәм бетерү операцияләре гадәттә тизрәк, бигрәк тә күп элементлар белән эшләгәндә, гади эчке структура һәм SparseArray очрагында хешлашуны булдырмау аркасында.

SparseIntArray куллану үрнәге:

// SparseIntArray ясау
SparseIntArray sparseArray = new SparseIntArray();

// Элементларны өстәү
sparseArray.put(0, 100);
sparseArray.put(1, 200);
sparseArray.put(10, 300);

// Ключ буенча кыйммәт алу
int value = sparseArray.get(1); // кыйммәт 200 булачак

// Дефолт кыйммәт белән алу
int valueWithDefault = sparseArray.get(5, -1); // кыйммәт -1 булачак

// Элементны бетерү
sparseArray.delete(10);

// Элементлар буенча итерация
for (int i = 0; i < sparseArray.size(); i++) {
    int key = sparseArray.keyAt(i);
    int val = sparseArray.valueAt(i);
    // Эшкәртү логикасы
}

Шулай ук SparseLongArray, SparseBooleanArray һәм LongSparseArray кулланыла. LongSparseArray объектларны саклаганлыктан, аның кыйммәтләре primitives түгел, ә объектлар.

Стандарт HashMap белән махсус Sparse карталар арасындагы сайлау сезнең таләпләргә бәйле:

  • Әгәр кљлчәләр төрле объектлар яки primitives булса, HashMap кулланыгыз.
  • Әгәр кљлчәләр int яки long булса, һәм кыйммәтләр primitives яки объектлар булса, LongSparseArray файдалы.

Мөһим: Sparse карталар потокка куркынычсыз түгел. Әгәр потокка куркынычсыз эшләү кирәк булса, primitives өчен обертка объектлары белән ConcurrentHashMap куллану карала. Ләкин, Android кушымтасының UI агымында, бу структуралар еш кулланылганда, потокка куркынычсызлык мәсьәләсе түгел.