Android'e yra žemėlapių, į kuriuos galima pridėti primitivių tipų. Ar galite apie tai papasakoti išsamiau?
sobes.tech AI
Atsakymas iš AI
Taip, Android SDK yra specializuotos Map įgyvendinimai, optimizuoti našumui ir atminties taupymui, palyginti su standartiniu HashMap<K, V>.
Dažniausiai naudojami:
SparseIntArray: saugointraktus irintreikšmes.SparseLongArray: saugointraktus irlongreikšmes.SparseBooleanArray: saugointraktus irbooleanreikšmes.LongSparseArray<E>: saugolongraktus irEtipo objektus.
Šių klasių naudojimo privalumai:
- Atminties efektyvumas: naudoja vidinius masyvus duomenų saugojimui, išvengiant objekto apvalkalo kūrimo išlaidų primitives (
Integer,Long,Boolean) irHashMapsusijusios struktūros. - Našumas: įterpimo, gavimo ir ištrynimo operacijos dažnai būna greitesnės, ypač dirbant su daug elementų, dėl paprastesnės vidinės struktūros ir išvengiant hashavimo
SparseArrayatveju.
SparseIntArray naudojimo pavyzdys:
// `SparseIntArray` kūrimas
SparseIntArray sparseArray = new SparseIntArray();
// Elementų pridėjimas
sparseArray.put(0, 100);
sparseArray.put(1, 200);
sparseArray.put(10, 300);
// Reikšmės gavimas pagal raktą
int value = sparseArray.get(1); // reikšmė bus 200
// Reikšmės gavimas su numatytąja reikšme
int valueWithDefault = sparseArray.get(5, -1); // reikšmė bus -1
// Elemento ištrynimas pagal raktą
sparseArray.delete(10);
// Pereiti per elementus
for (int i = 0; i < sparseArray.size(); i++) {
int key = sparseArray.keyAt(i);
int val = sparseArray.valueAt(i);
// Apdorojimo logika
}
Panašiai naudojami SparseLongArray, SparseBooleanArray ir LongSparseArray. LongSparseArray reikalauja nurodyti objekto tipą, nes jo reikšmės yra objektai, o ne primitives.
Pasirinkimas tarp standartinio HashMap ir specializuotų Sparse žemėlapių priklauso nuo jūsų reikalavimų:
- Jei raktai yra įvairūs objektai arba primitives, kurie nėra
intarbalong, naudokiteHashMap. - Jei raktai yra
intarbalong, o reikšmės primitives arba objektai,LongSparseArrayyra efektyvesnis.
Svarbu pažymėti, kad Sparse žemėlapiai nėra thread-safe. Jei jums reikalinga thread-safe implementacija, apsvarstykite ConcurrentHashMap naudojimą su apvalkimo objektais primitives. Tačiau daugeliu atvejų Android UI sraute, kur dažnai naudojamos šios struktūros, thread saugumas nėra problema.