Sobes.tech
Middle

Дар Android, харитаҳое ҳастанд, ки дар онҳо намудҳои primitives-ро метавон илова кард. Мехоҳед бештар дар бораи ин гап занед?

sobes.tech AI

Ҷавоб аз AI

Бале, барои кор бо намудҳои primitives дар Android SDK вуҷуд доранд иҷрои махсуси Map, ки барои иҷро ва сарфаи хотира оптимизатсия шудаанд дар муқоиса бо HashMap<K, V> стандартӣ.

Беҳтаринҳо:

  • SparseIntArray: нигоҳ медорад ҷуфтҳои int калидҳо ва int арзишҳо.
  • SparseLongArray: нигоҳ медорад ҷуфтҳои int калидҳо ва long арзишҳо.
  • SparseBooleanArray: нигоҳ медорад ҷуфтҳои int калидҳо ва boolean арзишҳо.
  • LongSparseArray<E>: нигоҳ медорад ҷуфтҳои long калидҳо ва объектҳои навъи E.

Манфиатҳои истифодаи ин синфҳо:

  • Самаранокии хотира: Онҳо массивҳои дохилиро барои нигоҳдории маълумот истифода мебаранд, ки аз хароҷоти вобаста ба сохтани объектҳои-обгортон барои намудҳои primitives (Integer, Long, Boolean) ва структураи пайвандии HashMap дур мемонанд.
  • Иҷрои: Операцияҳои ворид кардан, гирифтани ва тоза кардан одатан тезтар мебошанд, махсусан дар кор бо миқдори зиёди унсурҳо, бо сабаби сохтори соддатар ва дурӣ аз hashing барои калидҳои primitives дар SparseArray.

Масалан истифодаи SparseIntArray:

// Эҷоди SparseIntArray
SparseIntArray sparseArray = new SparseIntArray();

// Илова кардани унсурҳо
sparseArray.put(0, 100);
sparseArray.put(1, 200);
sparseArray.put(10, 300);

// Гирифтани арзиш ба калид
int value = sparseArray.get(1); // арзиш 200 хоҳад буд

// Гирифтани арзиш бо арзиши пешфарз
int valueWithDefault = sparseArray.get(5, -1); // арзиш -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 талаб мекунад, ки навъи объект муайян карда шавад, зеро арзишҳо дар он объектҳо мебошанд, на primitives.

Интихоб байни HashMap стандартӣ ва Sparse-ҳои махсус ба талаботҳои шумо вобаста аст:

  • Агар калидҳо объектҳои тасодуфӣ ё primitives бошанд, ки int ё long нестанд, истифода баред HashMap.
  • Агар калидҳо int ё long бошанд ва арзишҳо primitives ё объектҳо дар ҳолати LongSparseArray, ва самаранокии хотира ва иҷро муҳим бошад, беҳтар аст истифодаи Sparse-ҳо.

Муҳим аст, ки қайд кардан, ки Sparse-ҳо дар баробари thread-safe нестанд. Агар ба шумо иҷрои thread-safe лозим бошад, истифодаи ConcurrentHashMap бо объектҳои-обгортон барои primitives баррасӣ кунед. Аммо, дар аксари ҳолатҳо дар дохили thread-и UI-и барномаҳои Android, ки ин структураҳо зуд-зуд истифода мешаванд, бехатарии thread масъала нест.