V Androidu existují mapy, do kterých lze přidávat primitivní typy. Můžeš o tom říct víc?
sobes.tech AI
Odpověď od AI
Ano, pro práci s primitivními typy v Android SDK jsou k dispozici specializované implementace Map, optimalizované z hlediska výkonu a úspory paměti ve srovnání se standardním HashMap<K, V>.
Nejčastější:
SparseIntArray: Ukládá páryintklíčů ainthodnot.SparseLongArray: Ukládá páryintklíčů alonghodnot.SparseBooleanArray: Ukládá páryintklíčů abooleanhodnot.LongSparseArray<E>: Ukládá párylongklíčů a objekty typuE.
Výhody použití těchto tříd:
- Efektivita paměti: Používají vnitřní pole pro ukládání dat, čímž se vyhýbají režii spojené s vytvářením obalových objektů pro primitivní typy (
Integer,Long,Boolean) a strukturou spojového seznamuHashMap. - Výkon: Operace vkládání, získávání a mazání jsou obvykle rychlejší, zejména při práci s velkým množstvím prvků, díky jednodušší vnitřní struktuře a vyhýbání se hashování u primitivních klíčů v případě SparseArray.
Příklad použití SparseIntArray:
// Vytvoření SparseIntArray
SparseIntArray sparseArray = new SparseIntArray();
// Přidání prvků
sparseArray.put(0, 100);
sparseArray.put(1, 200);
sparseArray.put(10, 300);
// Získání hodnoty podle klíče
int value = sparseArray.get(1); // value bude 200
// Získání hodnoty s výchozí hodnotou
int valueWithDefault = sparseArray.get(5, -1); // valueWithDefault bude -1
// Odstranění prvku podle klíče
sparseArray.delete(10);
// Iterace přes prvky
for (int i = 0; i < sparseArray.size(); i++) {
int key = sparseArray.keyAt(i);
int val = sparseArray.valueAt(i);
// Logika zpracování key a val
}
Podobně se používají SparseLongArray, SparseBooleanArray a LongSparseArray. LongSparseArray vyžaduje specifikaci typu objektu, protože její hodnoty jsou objekty, nikoli primitivní typy.
Volba mezi standardním HashMap a specializovanými Sparse mapami závisí na vašich požadavcích:
- Pokud jsou klíče libovolné objekty nebo primitivní typy, které nejsou
intnebolong, použijteHashMap. - Pokud jsou klíče
intnebolonga hodnoty primitivní typy nebo objekty v případěLongSparseArray, a je důležitá efektivita paměti a výkon, je vhodnější použít Sparse mapy.
Je důležité poznamenat, že Sparse mapy nejsou vlákny bezpečné. Pokud potřebujete vlákny bezpečnou implementaci, zvažte použití ConcurrentHashMap s obalovými objekty pro primitivní typy. Nicméně, ve většině případů v rámci UI vlákna Android aplikace, kde jsou tyto struktury často používány, není bezpečnost vláken problém.