Sobes.tech
Middle

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 parove int ključeva i int vrednosti.
  • SparseLongArray: Čuva parove int ključeva i long vrednosti.
  • SparseBooleanArray: Čuva parove int ključeva i boolean vrednosti.
  • LongSparseArray<E>: Čuva parove long ključeva i objekata tipa E.

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 liste HashMap.
  • 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 int ili long, koristite HashMap.
  • Ako su ključevi int ili long, a vrednosti su primitivni tipovi ili objekti u slučaju LongSparseArray, 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.