Sobes.tech
Middle

Androidis on kaarte, kuhu saab lisada primitiivseid tüüpe. Kas sa saad sellest rohkem rääkida?

sobes.tech AI

Vastus AI-lt

Jah, Android SDK-l on spetsiaalsed Map-i rakendused, mis on optimeeritud jõudluse ja mälu säästmise jaoks võrreldes standardse HashMap<K, V>-ga.

Kõige levinumad:

  • SparseIntArray: salvestab int-võtmed ja int-väärtused.
  • SparseLongArray: salvestab int-võtmed ja long-väärtused.
  • SparseBooleanArray: salvestab int-võtmed ja boolean-väärtused.
  • LongSparseArray<E>: salvestab long-võtmed ja E-tüüpi objekte.

Nende klasside kasutamise eelised:

  • Mälu tõhusus: kasutavad sisemisi massiive andmete salvestamiseks, vältides primitiivsete tüüpide (Integer, Long, Boolean) jaoks objektiümbriste loomise kulusid ning HashMap-i seotud struktuuri.
  • Jõudlus: sisestamise, saamise ja kustutamise operatsioonid on tavaliselt kiirem, eriti suure elemendihulgaga töötades, tänu lihtsamale sisemisele struktuurile ja hashimise vältimisele SparseArray-s.

SparseIntArray kasutamise näide:

// SparseIntArray loomine
SparseIntArray sparseArray = new SparseIntArray();

// Elementide lisamine
sparseArray.put(0, 100);
sparseArray.put(1, 200);
sparseArray.put(10, 300);

// Väärtuse saamine võtme järgi
int value = sparseArray.get(1); // väärtus on 200

// Väärtuse saamine vaikimisi väärtusega
int valueWithDefault = sparseArray.get(5, -1); // väärtus on -1

// Elemendi kustutamine võtme järgi
sparseArray.delete(10);

// Elementide iteratsioon
for (int i = 0; i < sparseArray.size(); i++) {
    int key = sparseArray.keyAt(i);
    int val = sparseArray.valueAt(i);
    // Töötlemise loogika
}

Sarnaselt kasutatakse SparseLongArray, SparseBooleanArray ja LongSparseArray. LongSparseArray nõuab objekti tüübi määramist, kuna selle väärtused on objektid, mitte primitiivid.

Valik standardse HashMap ja spetsialiseeritud Sparse kaartide vahel sõltub teie nõuetest:

  • Kui võtmed on erinevad objektid või primitiivid, mis ei ole int või long, kasutage HashMap.
  • Kui võtmed on int või long, ja väärtused on primitiivid või objektid, on LongSparseArray tõhusam.

Oluline on märkida, et Sparse kaardid ei ole thread-safe. Kui vajate thread-safe rakendust, kaaluda ConcurrentHashMap kasutamist koos primitiivide ümbrise objektidega. Kuid enamikul juhtudel Androidi UI-kiirusel töötades, kus neid struktuure sageli kasutatakse, ei ole thread-turvalisus probleem.