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 агымында, бу структуралар еш кулланылганда, потокка куркынычсызлык мәсьәләсе түгел.