Androidban léteznek térképek, amelyekhez primitív típusokat lehet hozzáadni. Tudnál erről részletesebben beszélni?
sobes.tech MI
Válasz az MI-től
Igen, az Android SDK-ban léteznek speciális Map-megvalósítások primitív típusok kezelésére, amelyek a teljesítményt és a memóriahatékonyságot növelik a szokásos HashMap<K, V>-hez képest.
A leggyakoribbak:
SparseIntArray:intkulcsokat ésintértékeket tárol párokban.SparseLongArray:intkulcsokat éslongértékeket tárol párokban.SparseBooleanArray:intkulcsokat ésbooleanértékeket tárol párokban.LongSparseArray<E>:longkulcsokat ésEtípusú objektumokat tárol.
Ezek használatának előnyei:
- Memóriahatékonyság: belső tömböket használnak az adatok tárolására, elkerülve az objektumok létrehozásával járó költségeket (
Integer,Long,Boolean), valamint aHashMapláncolt listás szerkezetét. - Teljesítmény: az beszúrás, lekérdezés és törlés műveletek általában gyorsabbak, különösen sok elem esetén, egyszerűbb belső szerkezetük és a primitív kulcsok hash-elésének elkerülése miatt.
A SparseIntArray használatának példája:
// SparseIntArray létrehozása
SparseIntArray sparseArray = new SparseIntArray();
// Elemek hozzáadása
sparseArray.put(0, 100);
sparseArray.put(1, 200);
sparseArray.put(10, 300);
// Érték lekérdezése kulcs alapján
int value = sparseArray.get(1); // érték 200 lesz
// Érték lekérdezése alapértelmezett értékkel
int valueWithDefault = sparseArray.get(5, -1); // érték -1 lesz
// Elem törlése kulcs alapján
sparseArray.delete(10);
// Iterálás az elemek felett
for (int i = 0; i < sparseArray.size(); i++) {
int key = sparseArray.keyAt(i);
int val = sparseArray.valueAt(i);
// kulcs és érték feldolgozó logika
}
Hasonlóan használhatók a SparseLongArray, SparseBooleanArray és LongSparseArray is. A LongSparseArray típusát meg kell határozni, mivel értékei objektumok, nem primitív típusok.
A választás a standard HashMap és a speciális Sparse térképek között az igényeidtől függ:
- Ha a kulcsok tetszőleges objektumok vagy nem
intvagylongprimitív típusok, akkor használjHashMap-et. - Ha a kulcsok
intvagylong, és az értékek primitív típusok vagy objektumok aLongSparseArrayesetében, és fontos a memóriahatékonyság és a teljesítmény, akkor a Sparse térképek a jobb választás.
Fontos megjegyezni, hogy a Sparse térképek nem szálbiztosak. Ha szálbiztos megoldásra van szükséged, fontold meg a ConcurrentHashMap használatát primitív típusokhoz tartozó wrapper objektumokkal. Azonban a legtöbb esetben, az Android alkalmazás UI szálán, ahol ezeket a struktúrákat gyakran használják, a szálbiztonság nem jelent problémát.