U Androidu postoje mape u koje možete dodavati primitivne tipove. Možete li o tome reći više?
sobes.tech АИ
Одговор од АИ
Da, za rad sa primitivnim tipovima u Android SDK postoje specijalizirane implementacije Map, optimizovane za performanse i uštedu memorije u poređenju sa standardnim HashMap<K, V>.
Najčešće:
SparseIntArray: Čuva paroveintključeva iintvrednosti.SparseLongArray: Čuva paroveintključeva ilongvrednosti.SparseBooleanArray: Čuva paroveintključeva ibooleanvrednosti.LongSparseArray<E>: Čuva parovelongključeva i objekata tipaE.
Prednosti korišćenja ovih klasa:
- Efikasnost memorije: Koriste unutrašnje nizove za skladištenje podataka, izbegavajući troškove povezane sa kreiranjem obuhvatnih objekata za primitivne tipove (
Integer,Long,Boolean) i strukturu povezane listeHashMap. - Performanse: Operacije umetanja, dobijanja i brisanja su obično brže, posebno kod velikog broja elemenata, zahvaljujući jednostavnijoj unutrašnjoj strukturi i izbegavanju hashiranja kod
SparseArray.
Primer korišćenja SparseIntArray:
// Kreiranje SparseIntArray
SparseIntArray sparseArray = new SparseIntArray();
// Dodavanje elemenata
sparseArray.put(0, 100);
sparseArray.put(1, 200);
sparseArray.put(10, 300);
// Dobijanje vrednosti po ključu
int value = sparseArray.get(1); // value će biti 200
// Dobijanje vrednosti sa podrazumevanom vrednošću
int valueWithDefault = sparseArray.get(5, -1); // valueWithDefault će biti -1
// Brisanje elementa po ključu
sparseArray.delete(10);
// Iteracija kroz elemente
for (int i = 0; i < sparseArray.size(); i++) {
int key = sparseArray.keyAt(i);
int val = sparseArray.valueAt(i);
// Logika obrade key i val
}
Slično se koriste SparseLongArray, SparseBooleanArray i LongSparseArray. LongSparseArray zahteva specificiranje tipa objekta, jer su vrednosti u njoj objekti, a ne primitivni tipovi.
Izbor između standardnog HashMap i specijalizovanih Sparse mapa zavisi od vaših zahteva:
- Ako su ključevi proizvoljni objekti ili primitivni tipovi koji nisu
intililong, koristiteHashMap. - Ako su ključevi
intililong, a vrednosti su primitivni tipovi ili objekti u slučajuLongSparseArray, i važna je efikasnost memorije i performanse, preporučuje se korišćenje Sparse mapa.
Važno je napomenuti da Sparse mape nisu bezbedne za rad u više niti. Ako vam je potrebna bezbedna za niti implementacija, razmotrite korišćenje ConcurrentHashMap sa obuhvatnim objektima za primitivne tipove. Međutim, u većini slučajeva u okviru UI niti Android aplikacije, gde se često koriste ove strukture, bezbednost niti nije problem.