Sobes.tech
Middle

Android ir kartes, kurās var pievienot primitivus tipus. Vai vari par to pastāstīt sīkāk?

sobes.tech AI

Atbilde no AI

Jā, Android SDK ir specializētas Map realizācijas, kas ir optimizētas veiktspējai un atmiņas ietaupīšanai salīdzinājumā ar standarta HashMap<K, V>.

Visbiežāk sastopamās:

  • SparseIntArray: glabā int atslēgas un int vērtības.
  • SparseLongArray: glabā int atslēgas un long vērtības.
  • SparseBooleanArray: glabā int atslēgas un boolean vērtības.
  • LongSparseArray<E>: glabā long atslēgas un E tipa objektus.

Šo klases izmantošanas priekšrocības:

  • Atmiņas efektivitāte: tās izmanto iekšējos masīvus datu glabāšanai, izvairoties no objektu ietīšanas izdevumiem primitives (Integer, Long, Boolean) un HashMap saistītās struktūras.
  • Veiktspēja: pievienošanas, iegūšanas un dzēšanas operācijas parasti ir ātrākas, īpaši ar lielu elementu skaitu, pateicoties vienkāršākai iekšējai struktūrai un izvairoties no hashēšanas SparseArray gadījumā.

SparseIntArray lietošanas piemērs:

// `SparseIntArray` izveide
SparseIntArray sparseArray = new SparseIntArray();

// Elementu pievienošana
sparseArray.put(0, 100);
sparseArray.put(1, 200);
sparseArray.put(10, 300);

// Vērtības iegūšana pēc atslēgas
int value = sparseArray.get(1); // vērtība būs 200

// Vērtības iegūšana ar noklusējuma vērtību
int valueWithDefault = sparseArray.get(5, -1); // vērtība būs -1

// Elementa dzēšana pēc atslēgas
sparseArray.delete(10);

// Iterācija pa elementiem
for (int i = 0; i < sparseArray.size(); i++) {
    int key = sparseArray.keyAt(i);
    int val = sparseArray.valueAt(i);
    // Apstrādes loģika
}

Tāpat tiek izmantoti SparseLongArray, SparseBooleanArray un LongSparseArray. LongSparseArray prasa norādīt objekta tipu, jo tās vērtības ir objekti, ne primitives.

Izvēle starp standarta HashMap un specializētajām Sparse kartēm ir atkarīga no jūsu prasībām:

  • Ja atslēgas ir dažādi objekti vai primitives, kas nav int vai long, izmantojiet HashMap.
  • Ja atslēgas ir int vai long, un vērtības ir primitives vai objekti, LongSparseArray ir efektīvāka.

Svarīgi atzīmēt, ka Sparse kartes nav thread-safe. Ja jums ir nepieciešama thread-safe realizācija, apsveriet ConcurrentHashMap ar apvalka objektiem primitives. Tomēr lielākajā daļā gadījumu Android UI pavedienā, kur šīs struktūras bieži tiek izmantotas, thread drošība nav problēma.