Sobes.tech
Middle
139

Android-да префикс типтерін қосуға болатын карталар бар. Бұл туралы толығырақ айта аласыз ба?

AI-дан жауап

sobes.tech AI

Иә, Android SDK-да примитивті типтермен жұмыс істеу үшін арнайы жүзеге асырылған Map түрлері бар, олар стандартты HashMap<K, V>-ға қарағанда өнімділік пен жадты үнемдеуге оңтайландырылған.

Ең кең тарағандары:

  • SparseIntArray: int кілттері мен int мәндерін сақтайды.
  • SparseLongArray: int кілттері мен long мәндерін сақтайды.
  • SparseBooleanArray: int кілттері мен boolean мәндерін сақтайды.
  • LongSparseArray<E>: long кілттері мен E типті объектілерді сақтайды.

Осы кластарды қолданудың артықшылықтары:

  • Жад тиімділігі: Олар деректерді сақтау үшін ішкі массивтерді пайдаланады, бұл объектілерді (мысалы, Integer, Long, Boolean) құру және HashMap құрылымындағы байланысты тізбекті тізімнің шығындарын болдырмайды.
  • Өнімділік: Қосу, алу және жою операциялары әдетте тезірек орындалады, әсіресе көп элементтермен жұмыс істегенде, себебі ішкі құрылымы қарапайым және SparseArray жағдайында хештеуді болдырмайды.

SparseIntArray қолданудың мысалы:

// SparseIntArray құру
SparseIntArray sparseArray = new SparseIntArray();

// Элементтерді қосу
sparseArray.put(0, 100);
sparseArray.put(1, 200);
sparseArray.put(10, 300);

// Кілт бойынша мәнді алу
int value = sparseArray.get(1); // value 200 болады

// Әдепкі мәнмен алу
int valueWithDefault = sparseArray.get(5, -1); // valueWithDefault -1 болады

// Элементті жою
sparseArray.delete(10);

// Элементтер бойынша қайталау
for (int i = 0; i < sparseArray.size(); i++) {
    int key = sparseArray.keyAt(i);
    int val = sparseArray.valueAt(i);
    // key және val өңдеу логикасы
}

Ұқсас түрде SparseLongArray, SparseBooleanArray және LongSparseArray пайдаланылады. LongSparseArray объектілерді сақтайды, сондықтан оның мәндері объектілер болып табылады, ал LongSparseArray-да long типті кілттер мен мәндер.

Стандартты HashMap пен арнайы Sparse-карталар арасындағы таңдау сіздің талаптарыңызға байланысты:

  • Егер кілттер ретінде кез келген объектілер немесе int немесе long емес примитивтер қолданылса, HashMap пайдаланыңыз.
  • Егер кілттер int немесе long болса, ал мәндер примитивтер немесе LongSparseArray жағдайында объектілер болса, және жад пен өнімділік маңызды болса, Sparse-карталарды қолданған дұрыс.

Маңызды ескерту: Sparse-карталар ағын қауіпсіз емес. Егер ағын қауіпсіз жүзеге асыру қажет болса, ConcurrentHashMap-ты примитивтер үшін объектілер-оберткамен пайдаланыңыз. Алайда, Android қосымшасының UI ағынында жиі қолданылатын бұл құрылымдар үшін, ағын қауіпсіздігі әдетте маңызды емес.