Sobes.tech
Middle

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: saugo int raktus ir int reikšmes.
  • SparseLongArray: saugo int raktus ir long reikšmes.
  • SparseBooleanArray: saugo int raktus ir boolean reikšmes.
  • LongSparseArray<E>: saugo long raktus ir E tipo objektus.

Šių klasių naudojimo privalumai:

  • Atminties efektyvumas: naudoja vidinius masyvus duomenų saugojimui, išvengiant objekto apvalkalo kūrimo išlaidų primitives (Integer, Long, Boolean) ir HashMap susijusios 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 SparseArray atveju.

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 int arba long, naudokite HashMap.
  • Jei raktai yra int arba long, o reikšmės primitives arba objektai, LongSparseArray yra 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.