V Androidi existujú mapy, do ktorých môžete pridávať primitívne typy. Môžete o tom povedať viac?
sobes.tech AI
Odpoveď od AI
Áno, na prácu s primitívnymi typmi v Android SDK existujú špecializované implementácie Map, optimalizované z hľadiska výkonu a úspory pamäte v porovnaní so štandardným HashMap<K, V>.
Najbežnejšie:
SparseIntArray: Ukladá páryintkľúčov ainthodnôt.SparseLongArray: Ukladá páryintkľúčov alonghodnôt.SparseBooleanArray: Ukladá páryintkľúčov abooleanhodnôt.LongSparseArray<E>: Ukladá párylongkľúčov a objektov typuE.
Výhody použitia týchto tried:
- Efektívnosť pamäte: Používajú vnútorné polia na ukladanie dát, čím sa vyhýbajú režii spojené s vytváraním obalových objektov pre primitívne typy (
Integer,Long,Boolean) a štruktúrou spojeného zoznamuHashMap. - Výkon: Operácie vkladania, získavania a odstraňovania sú zvyčajne rýchlejšie, najmä pri práci s veľkým množstvom prvkov, vďaka jednoduchšej vnútornej štruktúre a vyhýbaniu sa hashovaniu pri
SparseArray.
Príklad použitia SparseIntArray:
// Vytvorenie SparseIntArray
SparseIntArray sparseArray = new SparseIntArray();
// Pridanie prvkov
sparseArray.put(0, 100);
sparseArray.put(1, 200);
sparseArray.put(10, 300);
// Získanie hodnoty podľa kľúča
int value = sparseArray.get(1); // hodnota bude 200
// Získanie hodnoty s predvolenou hodnotou
int valueWithDefault = sparseArray.get(5, -1); // hodnota bude -1
// Odstránenie prvku podľa kľúča
sparseArray.delete(10);
// Iterácia cez prvky
for (int i = 0; i < sparseArray.size(); i++) {
int key = sparseArray.keyAt(i);
int val = sparseArray.valueAt(i);
// Logika spracovania key a val
}
Podobne sa používajú SparseLongArray, SparseBooleanArray a LongSparseArray. LongSparseArray vyžaduje špecifikáciu typu objektu, pretože jej hodnoty sú objekty, nie primitívne typy.
Voľba medzi štandardným HashMap a špecializovanými Sparse mapami závisí od vašich požiadaviek:
- Ak sú kľúče ľubovoľné objekty alebo primitívne typy, ktoré nie sú
intalebolong, použiteHashMap. - Ak sú kľúče
intalebolonga hodnoty sú primitívne typy alebo objekty v prípadeLongSparseArray, a je dôležitá efektívnosť pamäte a výkon, je vhodnejšie použiť Sparse mapy.
Je dôležité poznamenať, že Sparse mapy nie sú vlákno-bezpečné. Ak potrebujete vlákno-bezpečnú implementáciu, zvážte použitie ConcurrentHashMap s obalovými objektmi pre primitívne typy. Avšak, vo väčšine prípadov v rámci UI vlákna Android aplikácie, kde sú tieto štruktúry často používané, bezpečnosť vlákien nie je problém.