Sobes.tech
Middle

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: int kulcsokat és int értékeket tárol párokban.
  • SparseLongArray: int kulcsokat és long értékeket tárol párokban.
  • SparseBooleanArray: int kulcsokat és boolean értékeket tárol párokban.
  • LongSparseArray<E>: long kulcsokat és E tí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 a HashMap lá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 int vagy long primitív típusok, akkor használj HashMap-et.
  • Ha a kulcsok int vagy long, és az értékek primitív típusok vagy objektumok a LongSparseArray eseté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.